2010-02-04 3 views
4

Пожалуйста, взгляните на программу ниже. Почему я получаю сообщение об ошибке?Ошибка связи в C++ по g ++

#include <stdlib.h> 
#include <string> 
#include <string.h> 
#include <iostream> 


using namespace std; 

class serverData 
{ 
public: 
    static int serverTemp; 
    static int server; 
}; 
int main(int argc, char** argv) 
{ 
    string s = "sajad bahmani"; 
    serverData::server = 90 ; 

    const char * a = s.data(); 
    cout << a[0] << endl; 

    return (EXIT_SUCCESS); 
} 

В соединении, я получаю эту ошибку при попытке ссылки:

build/Debug/GNU-Linux-x86/main.o: In function `main': 
/home/sb23/pr/main.cpp:14: undefined reference to `serverData::server' 
collect2: ld returned 1 exit status 
+5

Это * не * ** ** ошибка компиляции, то есть ** Ошибка ссылки ** –

+0

Используйте s.c_str(), чтобы получить "C-стиль" строку из станда :: строки, s .data() не гарантируется завершение нулем. –

ответ

8

Статические переменные-члены должны иметь память, выделенная в одном из файлов .cpp:

/* static */ 
int serverData::serverTemp; 
int serverData::server; 
2

У вас есть просто объявили ваши статические члены внутри класса, но пока не определили их. Вы должны определить их вне класса.

//definition 
int serverData::serverTemp; //implicitly initialized to 0 
int serverData::server = 5; // initialized to 5 
+0

Вы уверены, что первый из них инициализирован? –

+0

@Martin: Да, я уверен в этом. –

Смежные вопросы