虽然我是 C++ 新手,(我有 Java 经验)我正在启动一个需要使用GNE或游戏网络引擎的项目。
在他们的教程中,(从 2003 年开始授予)他们使用这一行:
if ( initGNE( NL_IP, atexit ) ) {
在我的代码中,我使用以下内容:
log("Initializing GNE...");
if(initGNE(NL_IP, atexit)) {
err("GNE failed to initialize!");
err("Press ENTER to close MoServ...");
std::cin.get();
exit(0);
}
log("-> Registering game version...");
setGameInformation(myName(), myVer());
log("-> Initializing console...");
initConsole(false);
setTitle("MoServ");
log("GNE initialized!");
编译时(在 Linux 上使用 g++,通过 eclipse /w CDT)我收到以下错误:
/home/tehtros/Dev/MoServ/Debug/../src/main.cpp:38: undefined reference to `GNE::initGNE(unsigned int, int (*)(void (*)()), int)'
/home/tehtros/Dev/MoServ/Debug/../src/main.cpp:46: undefined reference to `GNE::setGameInformation(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int)'
/home/tehtros/Dev/MoServ/Debug/../src/main.cpp:48: undefined reference to `GNE::Console::initConsole(bool)'
/home/tehtros/Dev/MoServ/Debug/../src/main.cpp:49: undefined reference to `GNE::Console::setTitle(char const*)'
注意:在文档中,他们确实说过,除非您首先调用 GNE::initGNE(),否则所有其他 GNE 函数都会出现“未定义引用”错误。
如果我改变:
if(initGNE(NL_IP, atexit)) {
到:
if(initGNE(NL_IP, atexit())) {
然后我得到错误:
../src/main.cpp:38:27: error: too few arguments to function ‘int atexit(void (*)())’
虽然这在文档中没有,但如果我改变它:
if(initGNE(NL_IP, atexit())) {
更进一步,对此:
if(initGNE(NL_IP, atexit(shutdownGNE()))) {
然后我得到这个错误:
../src/main.cpp:38:40: error: invalid use of void expression
如果我删除括号,如下所示:
if(initGNE(NL_IP, atexit(shutdownGNE))) {
然后我得到这个错误:
../src/main.cpp:38:39: error: invalid conversion from ‘int’ to ‘int (*)(void (*)())’ [-fpermissive]
/usr/local/include/gnelib/ObjectBrokerClient.h:120:15: error: initializing argument 2 of ‘bool GNE::initGNE(NLenum, int (*)(void (*)()), int)’ [-fpermissive]
正如你所看到的,我有点迷路了。我不知道 GNE 是否坏了,如果我只是犯了一个小错误,或者我完全不知道我在做什么,我应该停止尝试用我的一点理解来编写这么大的东西。(再一次,我通过实际做来学习,而不是通过阅读如何去做。)任何人都可以提供任何帮助或支持,并澄清我做错了什么,如果有的话?
编辑:我直接从他们的网站复制并粘贴了他们的示例,没有进行任何修改,并且没有编译。
解决方案:我通过更改命令的顺序解决了这个问题。在命令行上,我可以这样编译:
g++ -o test "test.cpp" -lgnelib -lNL
为了使这项工作与 Eclipse 一起工作,我添加了gnelib
和NL
作为库,并将构建命令更改为:
${COMMAND} ${INPUTS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${FLAGS}