gpt4 book ai didi

c++ - 类的链接器错误使用了它扩展的类中的方法

转载 作者:行者123 更新时间:2023-11-28 07:55:27 24 4
gpt4 key购买 nike

我有一些代码可以编译,但不会链接。我不确定这是为什么 - 我知道这个问题通常可以通过修复链接在一起的内容来解决,但我不知道为什么会这样。 TransGame 是 Game 的扩展类,SearchGame 是 TransGame 的扩展类。

这是我遇到的错误:

mrdmnd@dr-wily:~/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

这是我的生成文件:

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 $@

*.o :
$(CXX) $(CFLAGS) $< -o $@

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

游戏.cc

#include "Game.h"
// snip
inline long Game::positioncode() {
return color[nplies & 1] + color[0] + color[1] + BOTTOM;
}

游戏.h

#ifndef GAME_H
#define GAME_H
//snip
class Game {
public:
//snip
long positioncode();
//snip
};

#endif

非常感谢任何帮助 - 我确定我的 makefile 中遗漏了一些明显的东西。

最佳答案

你的函数 Game::positioncode() 是一个内联函数,需要在函数头中,因为编译器需要知道它的定义来替换对 positioncode 的调用> 使用代码。

有两种方法:可以在 class Game 的定义下面添加函数,也可以直接将其添加到声明中:

class Game {
public:
long positioncode()
{
return color[nplies & 1] + color[0] + color[1] + BOTTOM;
}
};

关于c++ - 类的链接器错误使用了它扩展的类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com