我试图弄清楚这一点时,我一直在撞墙过去。我想使用这个函数从堆栈溢出中获取这些函数参数:
void split(const string& str, const string& delimiters, vector<string>& tokens);
我在ServerHandler类(ServerHandler.h)的头文件中定义它:
public:
ServerHandler();
~ServerHandler();
void split(const string& str, const string& delimiters, vector<string>& tokens);
void handleRequest(int client, string request);
void handlePutRequest(string request);
bool isValidPutRequest(vector<string> requestTokens);
我把它放在我的ServerHandler.cc类中:
void split(const string& str, const string& delimiters, vector<string>& tokens)
{
...
}
然后我尝试从我定义两个字符串和矢量对象的方法中调用它:
vector<string> requestTokens;
...
string firstHalf;
firstHalf = "tell mike hello!";
...
string spaceDelimiter;
spaceDelimiter = " ";
...
split(firstHalf, spaceDelimiter, requestTokens); // Throws compiler error here
如何修复此编译器错误?
编辑:
这是编译器错误:
ServerHandler.cc:(.text+0x674): undefined reference to `ServerHandler::split(std::string const&, std::string const&, std::vector<std::string, std::allocator<std::string> >&)'
答案 0 :(得分:4)
将类名添加到函数定义中:
void ServerHandler::split(const string& str,
const string& delimiters,
vector<string>& tokens)
{
...
}
答案 1 :(得分:2)
您没有在实现文件中声明方法的范围:
void ServerHandler::split(const string& str, const string& delimiters, vector<string>& tokens)
^^^^^^^^^^^^^^^
但这不是编译器错误,而是链接器错误。编译器很好,因为你在头文件中声明了方法,然后在链接阶段,该方法没有得到解决。