我刚开始一个新项目,并且我的类框架未编译。我收到的编译器错误是:

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中)。

如果有人能告诉我为什么会出现此错误,我将非常高兴。提前致谢! :)

最佳答案

您已经声明了静态变量,但尚未定义它们。您需要添加

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

到您的SQLComm.cpp文件。

尽管...正在考虑这可能不是您想要的。您打算声明非静态成员变量,例如,每个SQLComm实例都应包含这些变量,对吗?在这种情况下,只需删除static(不要将以上内容添加到.cpp文件中。

关于c++ - C++构造函数中体系结构x86_64的GCC undefined symbol ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19988766/

10-10 04:16