g ++说我有一个未定义的函数引用

时间:2014-09-09 00:47:46

标签: c++ g++

我试图弄清楚这一点时,我一直在撞墙过去。我想使用这个函数从堆栈溢出中获取这些函数参数:

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> >&)'

2 个答案:

答案 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)
     ^^^^^^^^^^^^^^^

但这不是编译器错误,而是链接器错误。编译器很好,因为你在头文件中声明了方法,然后在链接阶段,该方法没有得到解决。