所以我只是掌握了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) - 头文件如何与其他文件进行通信和协作,是否有明确的文档/指南可以提供帮助?
答案 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.";
}