未定义的类引用

时间:2017-01-29 03:56:10

标签: c++ eclipse

我一直在寻找约30-45分钟,并检查过拼写错误等。这是我很长一段时间以来第一次使用C ++进行编码,所以语法有点难以理解。我目前正在为我的项目制作基类,所以目前代码非常简单。

Server.h

    /*
 * Server.h
 *
 *  Created on: Jan 28, 2017
 *      Author: Jon
 */

#ifndef SERVER_H_
#define SERVER_H_

class Server {
public:
    Server();
    virtual ~Server();
    static Server* getInstance();

private:
    static Server* instance;
};


#endif /* SERVER_H_ */

Server.cpp

/*
 * Server.cpp
 *
 *  Created on: Jan 28, 2017
 *      Author: Jon
 */

#include "Server.h"

Server::Server() {
    // TODO Auto-generated constructor stub

}

Server::~Server() {
    // TODO Auto-generated destructor stub
}

Server* Server::getInstance() {
    if (!Server::instance)
        Server::instance = new Server();
    return Server::instance;
}

单元测试类

#include <iostream>
#include "Server.h"
#include <assert.h>

Server* server;

int main() {
    server = Server::getInstance();
    return 0;
}

我目前遇到的问题是......

对Server :: instance

的未定义引用

我是如何访问我的静态成员的?

2 个答案:

答案 0 :(得分:2)

getInstance是类Server的静态成员函数,属于命名空间Server,因此您应该在main()中使用它:

instance = Server::Server::getInstance();
//         ~~~~~~~~

您应该从

更改名称空间Server::instanceServer的定义
Server* instance;         // a non-member variable in namespace Server

Server* Server::instance; // the definition of the static member variable Server::instance

修改

编辑(删除命名空间)后,原始用法现在正确。唯一的问题是静态成员Server::instance的定义。您应该将其添加到Server.cpp

Server* Server::instance; // the definition of the static member variable Server::instance

答案 1 :(得分:0)

您尚未初始化Server::getInstance()

变化:

Server* getInstance() {

要:

Server* Server::getInstance() {

@songyuanyao是对的,Server::getInstance()是静态的,Server位于Server命名空间中。要致电getInstance(),请使用:

Server::Server::getInstance()