我编译了我的代码,这个错误信息出现在终端中,我不知道它意味着什么。 有人可以解释或给我一些提示吗?
/tmp/ccZ95DTV.o: In function `main': homework3_test.cpp:(.text+0x514):
undefined reference to `std::vector<int, std::allocator<int> >&
apply<PowerN>(std::vector<int, std::allocator<int> >&, PowerN)'
collect2: ld returned 1 exit status
代码:
int test_power1, test_power2, test_power3;
PowerN power_three(3);
//test_power will now be 1
power_three(test_power1);
//test_power will now be 3
power_three(test_power2);
//test_power will now be 9
power_three(test_power3);
if (1 == test_power1) {
std::cout<<"PowerN works for 3**0! +10\n";
score += 10;
}
else {
std::cout<<"PowerN failed on 3**0!\n";
}
if (3 == test_power2 and 9 == test_power3) {
std::cout<<"PowerN works for 3**1 and 3**2! +10\n";
score += 10;
}
else {
std::cout<<"PowerN failed for 3**1 and 3**2!\n";
}
std::vector<int> test_power_v(3);
PowerN power_lessfour(-4);
//apply turns the vector into [1, -4, 16]
apply(test_power_v, power_lessfour);
std::vector<int> check_power_v;
check_power_v << 1 << -4 << 16;
if (test_power_v == check_power_v) {
std::cout<<"Applying PowerN with -4 works! +10\n";
score += 10;
}
else {
std::cout<<"Applying PowerN with -4 failed!\n";
}
所以添加的是我的导师给出的测试代码。如果您想查看我的代码实现,请告诉我。
所以这些代码行是我的头文件
template <typename T>
vector<int>& apply(vector<int>& v, T function);
这些是cpp文件中的实现
template <typename T>
vector<int>& apply(vector<int>& v, T function) {
for (vector<int>::iterator I = v.begin(); I != v.end(); ++I) {
function(*I);
}
return v;
}
谢谢你们。我解决了这个问题。必须在头文件中定义模板,而不是实现文件。
答案 0 :(得分:2)
这意味着您为具有签名的函数创建了原型:
template <typename PowerN> vector<int> apply(vector<int>&, PowerN)
你打电话给它,但你实际上从未在你要求编译器构建的任何源代码中为这个函数编写了一个实体。
你有没有:
发布您的代码有助于人们更好地进行诊断。