Я пытаюсь использовать статическую переменную в одном из моих классов. Я использовал их раньше, без проблем. Теперь я получаю эту ошибку:
/tmp/ccg26aZi.o: В функции ‘main’: main.cpp :(. text + 0x7482):
неопределенная ссылка на `Rect :: rect_change ‘collect2: error: ld
вернул 1 статус выхода make: *** [exe] Ошибка 1
любой совет? Спасибо!
ОБНОВИТЬ:
Мне сказали проверить мой make-файл, чтобы убедиться, что rect.cpp был включен в создание exe-файла. Я переключил папку, чтобы она была в правильном месте. Но теперь я получаю совершенно новый набор ошибок, которые раньше я не получал:
Я проверил мой make-файл и убедился, что rect.cpp, и переместил его в другую папку, в которой работал * .cpp. Однако теперь я получаю новый набор ошибок:
includes / Rect.h: 16: 17: ошибка: «SDL_Rect» не называет тип Rect (const SDL_Rect & р)
includes / Rect.h: 16: 28: ошибка: ISO C ++ запрещает объявление ‘r’ без типа [-fpermissive] Rect (const SDL_Rect & р)
includes / Rect.h: 19: 2: ошибка: «SDL_Rect» не называет тип
SDL_Rect getSDL_Rect () ^ включает / Rect.h: в конструкторе
Ect Rect :: Rect (const int&) ’: Includes / Rect.h: 17: 9: ошибка: запрос на
член «x» в «r», который имеет неклассовый тип «const int»: x (r.x),
у (год), ш (год), ч (час)включает в себя / Rect.h: 17: 17: ошибка: запрос на членство «y» в «r», что
неклассового типа «const int»: x (r.x), y (r.y), w (r.w), h (r.h)включает в себя / Rect.h: 17: 25: ошибка: запрос для члена «w» в «r», который
неклассового типа «const int»: x (r.x), y (r.y), w (r.w), h (r.h)включает в себя / Rect.h: 17: 33: ошибка: запрос для члена «h» в «r», который
неклассового типа «const int»: x (r.x), y (r.y), w (r.w), h (r.h)
Вот содержимое моего файла make. rect.cpp находится внутри папки src.
exe: main.cpp
g++ *.cpp src/*.cpp src/*.c `sdl-config --cflags --libs` -lSDL_image -lSDL_mixer -lSDL_ttf -Iincludes
run:
./a.out
r:
./a.out
clean:
rm a.out
c:
rm a.out
// header
#ifndef RECT_H
#define RECT_H
#include <iostream>
class Rect
{
public:
Rect(int x0 = 0, int y0 = 0, int w0 = 0, int h0 = 0)
: x(x0), y(y0), w(w0), h(h0)
{}
Rect( const SDL_Rect & r)
: x(r.x), y(r.y), w(r.w), h(r.h)
{}
SDL_Rect getSDL_Rect()
{
SDL_Rect r = {x, y, w, h};
return r;
}
int x, y, w, h;
static int rect_change;
static int rect_change_max;
};
inline std::ostream & operator<<(std::ostream & cout, const Rect & r)
{
cout << "(" << r.x << "," << r.y << "," << r.w << "," << r.h << ")";
return cout;
}
#endif
rect.cpp
#include "Rect.h"
int Rect::rect_change = 0;
int Rect::rect_change_max = 0;
// main.cpp example
#include "Rect.h"
int main()
{
Rect rect;
rect.rect_change = 5;
return 0;
}
Спасибо за помощь и спасибо RichieHindle за ответ.
Мне нужно #include «SDL_gfxPrimitives.h», чтобы заставить его работать. Забавно, что это так, потому что я некоторое время работал над этим проектом, и компилятор вообще не жаловался, пока я не попытался добавить статический член.
Еще раз спасибо!