GCC C ++构造函数中的体系结构x86_64的未定义符号

时间:2013-11-14 21:27:59

标签: c++ gcc syntax compiler-errors

我刚刚启动了一个新项目,我的类骨架无法编译。我收到的编译错误是:

Undefined symbols for architecture x86_64:
  "SQLComm::ip", referenced from:
      SQLComm::SQLComm(int, std::__1::basic_string<char, std::__1::char_traits<char>,     std::__1::allocator<char> >) in SQLComm.o
  "SQLComm::port", referenced from:
  SQLComm::SQLComm(int, std::__1::basic_string<char, std::__1::char_traits<char>,     std::__1::allocator<char> >) in SQLComm.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我不知道为什么我的代码不能编译......这是错误的类:

SQLComm.h:

#ifndef __WhisperServer__SQLComm__
#define __WhisperServer__SQLComm__

#include <iostream>
#include <string>

class SQLComm {
public:
//Local vars
static int port;
static std::string ip;

//Public functions
void connect();
SQLComm(int sqlport, std::string sqlip);
~SQLComm();
private:

};



#endif /* defined(__WhisperServer__SQLComm__) */

这是SQLComm.cpp:

#include "SQLComm.h"


SQLComm::SQLComm(int sqlport, std::string sqlip){
ip = sqlip;
port = sqlport;
}

SQLComm::~SQLComm(){

}

void SQLComm::connect(){

}

系统是OSX10.9,编译器是GCC(在xCode中)。

如果有人能告诉我为什么会收到这个错误,我会非常高兴。提前致谢! :)

2 个答案:

答案 0 :(得分:1)

您已声明静态变量但尚未定义它们。你需要添加这个

int SQLComm::port;
std::string SQLComm::ip;

到您的SQLComm.cpp文件。

虽然......考虑到这一点,但这可能不是你的意图。您打算声明非静态成员变量,例如,SQLComm的每个实例都应包含这些变量,对吧?在这种情况下,只需删除static(并且不要将上述内容添加到.cpp文件中。

答案 1 :(得分:1)

您需要定义静态类变量。尝试

int SQLComm::port;
std::string SQLComm::ip;

在SQLComm.cpp。

注意:很可能,您不希望将这两个变量声明为静态类变量,而是将其声明为普通实例变量。