Visual Studio中LNK1168链接器错误及C++代码问题求助
解决你的C++链接器错误与代码问题
嘿,作为刚学C++一个月的新手,遇到这种问题真的太正常啦!咱们慢慢来,先搞定链接器错误,再梳理代码里的小问题~
首先处理LNK1168链接器错误
这个错误的核心原因是:你的CW_stringsorting.exe程序文件被占用了,导致编译器没法写入新的生成文件。常见的解决方法有这些:
- 打开任务管理器,找到
CW_stringsorting.exe的进程,直接结束它(有时候程序看似关闭了,但后台还在运行); - 关闭所有正在查看这个exe所在文件夹的窗口(比如资源管理器);
- 在Visual Studio里,点击顶部菜单栏的「生成」->「清理解决方案」,之后再重新生成项目;
- 偶尔杀毒软件会拦截编译器写入文件,你可以暂时关闭杀毒软件试试(记得之后重新开启哦)。
然后修正代码里的基础问题
你的代码里有几个可以优化和修正的地方:
- main函数里重复声明函数:你在main里写了
string twoSort(vector<string> s);,这完全没必要——因为你已经在main函数上方定义了这个函数,直接调用就行,删掉这行代码就好。 - 冗余的头文件:你引入了
<cstring>,但代码里没用到任何C风格字符串的函数(比如strcpy、strlen这类),可以把这个头文件删掉,让代码更简洁。 - 贴合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




