我有一些代碼編譯但不會鏈接。我不確定這是爲什麼 - 我知道這個問題通常是通過修復鏈接在一起的問題來解決的,但我不知道爲什麼這會突破。 TransGame是一個擴展Game的類,SearchGame是一個擴展TransGame的類。鏈接器錯誤類使用它擴展的類中的方法
這裏是我得到的錯誤:
[email protected]:~/ConnectFour$ make all
g++ -c -o SearchGame.o SearchGame.cc
g++ -c -o TransGame.o TransGame.cc
g++ -c -o Game.o Game.cc
g++ SearchGame.o TransGame.o Game.o -o SearchGame
TransGame.o: In function `TransGame::hash()':
TransGame.cc:(.text+0x5f): undefined reference to `Game::positioncode()'
collect2: ld returned 1 exit status
make: *** [SearchGame] Error 1
這裏是我的makefile:
CFLAGS = -c -Wall
SOURCES = SearchGame.cc TransGame.cc Game.cc
OBJECTS = $(SOURCES:.cc=.o)
EXECUTABLE = SearchGame
.PHONY : all clean
all : $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CXX) $(OBJECTS) -o [email protected]
*.o :
$(CXX) $(CFLAGS) $< -o [email protected]
clean:
rm -rf *.o
這裏是代碼的相關位:
TransGame.cc
#include "Game.h"
#include "TransGame.h"
// snip
void TransGame::hash() {
long htemp = positioncode();
//snip
}
TransGame.h
#ifndef TRANSGAME_H
#define TRANSGAME_H
//snip
class TransGame : public Game {
public:
//snip
void hash();
//snip
};
#endif
Game.cc
#include "Game.h"
// snip
inline long Game::positioncode() {
return color[nplies & 1] + color[0] + color[1] + BOTTOM;
}
Game.h
#ifndef GAME_H
#define GAME_H
//snip
class Game {
public:
//snip
long positioncode();
//snip
};
#endif
任何幫助將不勝感激 - 我相信我的思念在我的makefile一些明顯。
失去了內聯或將其與類定義移到頭文件。 – WhozCraig
您不能內聯.cc文件中的方法 - 它們必須放置在頭文件中。原因是編譯器需要查看內聯它的方法,但在使用時,他只知道頭文件 - 而不是cc文件。可能有編譯器有某種字典 - 但我懷疑它。 –