尝试构建和运行我的 C++ 项目时遇到以下错误:
||=== Build: Debug in CS II (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function 'main':|
|30|undefined reference to '(anonymous namespace)::deleteRepeats(char*)'||
|error: ld returned 1 exit status|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
每个文件的代码如下(如果有很多错误或完全错误,我不会感到惊讶,因为我根本无法测试它,而我的重点是解决这个问题):
main.cpp:
#include <iostream>
#include "implementation.hpp"
int main()
{
char originalArray[SIZE];
originalArray[0] = 'a';
originalArray[1] = 'b';
originalArray[2] = 'b';
originalArray[3] = 'c';
originalArray[4] = 'a';
originalArray[5] = 'c';
originalArray[6] = 'a';
originalArray[7] = 'c';
originalArray[8] = 'b';
originalArray[9] = 'c';
char *noRepeats;
noRepeats = deleteRepeats(&(originalArray[0]));
std::cout << noRepeats;
return 0;
}
实现.hpp:
#ifndef IMPLEMENTATION_HPP
#define IMPLEMENTATION_HPP
namespace
{
const int SIZE = 10;
char* deleteRepeats(char*);
}
#endif
实现.cpp:
#include "implementation.hpp"
char* deleteRepeats(char* array_to_edit)
{
char new_array[SIZE];
int num_of_unique_letters_seen = 0;
for (int letter = 0; letter < SIZE; letter++)
{
bool already_exists = false;
for (int letter_seen = 0; letter_seen < num_of_unique_letters_seen; letter_seen++)
{
if (array_to_edit[letter] == new_array[letter_seen])
{
already_exists = true;
}
}
if (!already_exists)
{
new_array[num_of_unique_letters_seen] = array_to_edit[letter];
num_of_unique_letters_seen++;
}
}
return &new_array[0];
}
我在这个问题的答案的评论中被提示问这个问题,这非常相似,但是当问题出现时,接受的答案已经在我的项目中完成了。
在未命名命名空间中声明的函数具有内部链接。所以需要在每个编译单元中定义它。
否则在命名空间中声明它。