You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Visual Studio中LNK1168链接器错误及C++代码问题求助

解决你的C++链接器错误与代码问题

嘿,作为刚学C++一个月的新手,遇到这种问题真的太正常啦!咱们慢慢来,先搞定链接器错误,再梳理代码里的小问题~

首先处理LNK1168链接器错误

这个错误的核心原因是:你的CW_stringsorting.exe程序文件被占用了,导致编译器没法写入新的生成文件。常见的解决方法有这些:

  • 打开任务管理器,找到CW_stringsorting.exe的进程,直接结束它(有时候程序看似关闭了,但后台还在运行);
  • 关闭所有正在查看这个exe所在文件夹的窗口(比如资源管理器);
  • 在Visual Studio里,点击顶部菜单栏的「生成」->「清理解决方案」,之后再重新生成项目;
  • 偶尔杀毒软件会拦截编译器写入文件,你可以暂时关闭杀毒软件试试(记得之后重新开启哦)。

然后修正代码里的基础问题

你的代码里有几个可以优化和修正的地方:

  1. main函数里重复声明函数:你在main里写了string twoSort(vector<string> s);,这完全没必要——因为你已经在main函数上方定义了这个函数,直接调用就行,删掉这行代码就好。
  2. 冗余的头文件:你引入了<cstring>,但代码里没用到任何C风格字符串的函数(比如strcpy、strlen这类),可以把这个头文件删掉,让代码更简洁。
  3. 贴合Code Wars题目要求的逻辑调整:你说这是Code Wars的8 kyu问题,原题目应该是要找出数组中字典序最小的字符串,然后把每个字符用***分隔开返回。你当前的拼接逻辑只是把所有字符串合并,还没达到题目要求,我帮你调整了函数逻辑:

修正后的完整代码:

#include <iostream>
#include<string>
#include<vector>
#include<algorithm> // 因为要用min_element函数
using namespace std;

string twoSort(vector<string> s) {
    // 找到vector中字典序最小的字符串
    string smallest_str = *min_element(s.begin(), s.end());
    string result;
    // 遍历每个字符,添加***分隔(最后一个字符不加)
    for (size_t i = 0; i < smallest_str.size(); ++i) {
        result += smallest_str[i];
        if (i != smallest_str.size() - 1) {
            result += "***";
        }
    }
    return result;
}

int main() {
    cout << twoSort({ "bitcoin", "take", "over", "the", "world", "maybe", "who", "knows", "perhaps" });
    // 运行后会输出:b***i***t***c***o***i***n
    return 0;
}

额外小提示

  • 尽量避免用using namespace std;,不过作为新手,暂时用着没问题,之后可以慢慢学习如何使用std::前缀来避免命名冲突;
  • 遍历vector或者string的时候,用size_t类型代替int会更安全,因为size()返回的是无符号整数类型。

内容的提问来源于stack exchange,提问作者perj

火山引擎 最新活动