2

我正在使用其他人的功能:

optimise(std::vector<double> &input)

它编辑输入。

我应该如何将向量传递给这个,我试过了:

std::vector<double> input;
input.push_back('several points');
optimise(input);

这有一个链接器错误说:

undefined reference to optimise(std::vector<double, std::allocator<double> >&)

如果我试试这个:

 std::vector<double> &input;
input.push_back('several points');
optimise(input);

然后出现编译错误:

'input' declared as reference but not initialised

如何初始化对向量的引用,或者我做错了什么。编辑:

我没有在我的 CMakeLists 中正确链接库。谢谢大家的帮助,我希望我能把你们都标记为正确的。

4

2 回答 2

2

您通过的第一种方式vector是正确的。编译器识别出该向量是通过从标头中的签名引用传递给函数的,引用您的向量,并将其传递给函数。您看到链接器错误的事实告诉您编译阶段已成功完成。

出现链接器错误是因为您没有包含optimise实现该函数的库。

于 2012-07-12T01:15:07.383 回答
1

由于某些链接器错误,第一次尝试似乎失败了。您必须确保您调用的函数实际上对链接器可用,无论是在某种库中,还是作为单独的翻译单元(源文件)或类似的。仅包含标头对于编译器就足够了,但对链接器没有帮助。

“输入”声明为引用但未初始化

这是有道理的:引用始终是对存在于别处的某个对象的引用。因此,如果不先告诉它要引用什么,就不能使用引用。最常见的情况是使用引用作为函数参数。通常该对象将是调用者范围内的普通非引用对象,并通过引用传递给被调用者以避免复制。在这方面,您的第一次尝试是正确的。

于 2012-07-12T01:19:27.440 回答