C ++ Headers&未定义参考

时间:2017-03-09 15:14:42

标签: c++ compilation header-files

所以我只是掌握了C ++并继续使用头文件。事情是,我完全糊涂了。我已经阅读了一份文档,但没有一篇能让我理解它。

我只是制作一个愚蠢的游戏'这是交互式的,它可能会被丢弃,并认为我可以练习使用头文件。这是我的文件结构:

   terminal_test
    ├── core.cpp
    └── game
        ├── game.cpp
        └── game.h

现在,这是我的core.cpp:

#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include "game/game.h"

using namespace std;

void mainMenu();
void rootInterface() {

  cout << "root@system:~# ";

}

int main() {

  system("clear");
  usleep(2000);

  mainMenu();

  return 0;

}

void mainMenu() {

  int menuChoice = 0;

  cout << "[1] - Start Game";
  cout << "[2] - How To Play";
  cout << endl;

  rootInterface();
  cin >> menuChoice;

  if ( menuChoice == 1 ) {

      startGame();

  } else if ( menuChoice == 2 ) {

      cout << "This worked."; 

  }
}

其他一切正常,但startGame();在我的菜单选项下。当我使用g++ core.cpp game/game.cpp进行编译时,它会因此错误而退回:undefined reference to startGame();。我首先做了一些问题排查,看看是否通过将game.h更改为#include "game/game.h"而没有列出内部目录的#include "game.h"来正确查找game.h并且它给了我一个#ifndef GAME_H // Making sure not to include the header multiple times #define GAME_H #include "game.h" void startGame(); #endif 无法被发现所以我知道它认识到它,根本就没有编译。

这是我的game.h:

#include <iostream>
#include <stdio.h>
#include "game.h"

int main(int argc, char const *argv[]) {

  void startGame() {

    cout << "It worked.";

  }

  return 0;
}

game.cpp:

from collections import OrderedDict

def add_pairs(sequence):
    container = OrderedDict()
    for tag, value in sequence:
        key = tag.split()[0]
        container[key] = container.get(key, 0) + value
    return container

我的文件结构也没有正确命名,我只是把它扔进去,因为它只是在C ++中掌握头文件。

所以,这是我的问题:

1) - 这个错误具体说什么,我应该怎么做才能解决它?

2) - 头文件如何与其他文件进行通信和协作,是否有明确的文档/指南可以提供帮助?

1 个答案:

答案 0 :(得分:3)

本地函数定义不是您想要的:

#include <iostream>
#include <stdio.h>
#include "game.h"

int main(int argc, char const *argv[]) {

  // an attempt to define startGame() inside of main()
  void startGame() {

    cout << "It worked.";

  }

  return 0;
}
您的main文件中不需要

game.cpp。您应该在main之外定义startGame(),如下所示:

#include <iostream>
#include <stdio.h>
#include "game.h"

// definition of startGame
void startGame() {

  cout << "It worked.";

}