C ++ Singleton в Xcode - PullRequest
       7

C ++ Singleton в Xcode

4 голосов
/ 25 января 2012

Я пытаюсь создать класс Singleton в C ++ с помощью Xcode. Это действительно базовый класс, и я получаю ошибку компоновщика, которую не понимаю. Может ли any1 помочь, пожалуйста?

Вот заголовочный файл класса:

#ifndef _NETWORK_H_
#define _NETWORK_H_

#include <iostream>
#include <list>
#include "Module.h"

using namespace std;

/*
 * Assume only one network can run at a time 
 * in the program. So make the class a singleton.
 */
class Network {
private:
    static Network* _instance;
    list<Module*> _network;

public:
    static Network* instance();
};

#endif

Вот файл impl:

#include "Network.h"

Network* Network::instance() {
    if (!_instance)
        _instance = new Network();
    return _instance;
}

Вот ошибка компилятора:

Undefined symbols for architecture x86_64:
  "Network::_instance", referenced from:
      Network::instance() in Network.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ответы [ 2 ]

6 голосов
/ 25 января 2012

Вам нужно где-то объявить фактическое хранилище для Network::_instance.Скорее всего импл.file.

Попробуйте добавить в ваш файл impl:

Network *Network::_instance=0;
4 голосов
/ 25 января 2012

Вам нужно определить ваш экземпляр в файле реализации:

#include "Network.h"

Network *Network::_instance;

Объявление static Network *_instance; просто говорит, что где-то существует Network::_instance.Вы должны предоставить где-то одно определение, чтобы оно действительно существовало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...