gpt4 book ai didi

c++ - 将 C++ vector 传递给方法导致未解析的外部

转载 作者:行者123 更新时间:2023-11-28 02:44:26 25 4
gpt4 key购买 nike

我看了很多例子,但我不知道自己做错了什么。我无法将 vector 作为参数传递,或者编译器提示未解析的外部。

这是一个对我不起作用的例子:

在.h中:

#include <vector>

void VectorTest(std::vector<std::string> & vect);

在 .cpp 中:

void VectorTest(std::vector<std::string> & vect)
{

}

同样在 .cpp 中,在我试图调用它的方法中:

std::vector<std::string> test;
VectorTest(test);

编译时出现错误:错误 LNK1120:1 个 Unresolved external 问题

如果我注释掉

VectorTest(test);

它构建。我还在学习 C++,所以这可能是显而易见的。如果重要的话,我正在使用 Visual Studio Express 2013。

在雅虎!回答有人发布了这个例子,但它对我不起作用,同样的错误:

void myfunc( std::vector<int>& vec ) 
{
}

std::vector<int> vec;
myfunc( vec );

这是错误(尝试使用上面显示的 myfunc):

error LNK2019: unresolved external symbol "public: void __thiscall trackManager::myfunc(class std::vector<int,class std::allocator<int> > &)" (?myfunc@trackManager@@QAEXAAV?$vector@HV?$allocator@H@std@@@std@@@Z) referenced in function "public: __thiscall trackManager::trackManager(void)" (??0trackManager@@QAE@XZ)

最佳答案

看起来你声明了 VectorTest()作为trackManager header 中的成员函数,但随后将其定义为 cpp 中的自由函数。这会导致两个不相关的同名函数。如果您尝试调用 VectorTest()没有来自内部的资格 trackManager成员函数,解析器将(明智地)更喜欢也是 trackManager 的版本成员超过免费功能。但是由于那个没有定义,链接器无法弄清楚如何处理它,你会得到一个错误。

要解决此问题,请将声明移出 trackManager 的正文(如果你想让它成为一个自由函数),或者把定义写成 void trackManager::VectorTest(...) (如果您希望它成为成员(member))。

关于c++ - 将 C++ vector 传递给方法导致未解析的外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24917692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com