2013-08-23 5 views
-2

Вот мой файл заголовка:неопределенная ссылка на статической переменной-члена в статической функции члена

class MapObject: public ScreenObject { 
    static float xoffset, yoffset; 
public: 
    static float Getxoffset() { 
     return xoffset; 
    } 

}; 

#endif // MAPOBJECT_H 

Однако на обратном линии xoffset; Я получаю следующую ошибку: Неопределенная ссылка на «MapObject :: xoffset» Почему?

+5

Вы никогда не определяли 'xoffset', только объявляли его. Поместите это в глобальную область только одного исходного файла: 'float MapObject :: xoffset;'. – jrok

+1

Вы определили статику 'xoffset' и' yoffset' в исходном файле .cpp, чтобы дать им правильную связь? Помните, что не-const statics должны быть внешне * определены *, а также объявлены в классе. – WhozCraig

+1

вам нужны статические переменные в файле .cpp: 'float MapObject :: xoffset' и т. Д. Но вы уверены, что хотите иметь эти статические? –

ответ

6

Поместите это в исходном файле (судя по ней MapObject.cpp)

#include "MapObject.h" 

float MapObject::xoffset = 0; 
float MapObject::yoffset = 0; 


//... the rest of your MapObject code here... 

В неконстантных static членах C++ должен быть как объявлен в определении класса и определены с глобальной областью действия, чтобы правильно дать линкер-то ссылку.

+0

Что вы подразумеваете под «определением с внешней связью»? – Mahesh

+0

@Mahesh См. [Этот вопрос] (http://stackoverflow.com/questions/1358400/what-is-external-linkage-and-internal-linkage-in-c) – WhozCraig

+1

Я понимаю концепцию связи. Я не понял в контексте вашего предложения. Я думаю, вы имели в виду, что определения должны идти в глобальном масштабе. Не так ли? – Mahesh

1

Вы должны иметь что-то подобное в вашем MapObject.cpp:

float MapObject::xoffset = 0.0f; 
float MapObject::yoffset = 0.0f; 

Таким образом, вы определить и инициализировать им.

+0

Я дал кредит @WhozCraig –

+0

спасибо за ваш ответ, однако он не должен быть статическим поплавком, просто плавать – user2673108

+0

@ user2673108 Я исправлю его. –

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