c++中的外部链接
External Linkage in c++
我正在制作一个简单的程序来处理扑克手牌和概率。我在不同的手上运行测试用例,在我的程序中,我需要一个牌组来绘制我的手牌,它是恒定的和全局的。我的程序有三个主要对象:Card, Hand和Deck。我试图创建一个全局甲板,但似乎无论我做什么,我得到一个错误说globalDeck是未定义的手。cpp。以下是相关代码:
hand.cpp:
Hand::Hand(int &one, int &two, int &three, int &four, int &five)
{
cardsinHand.push_back(globalDeck.copy(one));
cardsinHand.push_back(globalDeck.copy(two));
cardsinHand.push_back(globalDeck.copy(three));
cardsinHand.push_back(globalDeck.copy(four));
cardsinHand.push_back(globalDeck.copy(five));
}
和我的cardgames.cpp文件:
#include "stdafx.h"
#include<iostream>
#include "hand.h"
using namespace std;
Deck globalDeck;
void printresults(long successes, long trials)
......
注意:我已经尝试用外部甲板globalDeck,外部const globalDeck等代替甲板globalDeck。似乎没有什么可以使globalDeck在hand.cpp中定义。此外,deck在整个程序中保持不变,因此可以将其声明为全局常数或全局变量,以更容易的方式声明。我的错误输出是:
1>c:users\desktopsemesters pastwinter 2013computer programmingprojectscardgamescardgameshand.cpp(31): error C2065: 'globalDeck' : undeclared identifier
1>c:users\desktopsemesters pastwinter 2013computer programmingprojectscardgamescardgameshand.cpp(31): error C2228: left of '.copy' must have class/struct/union
1> type is 'unknown-type'
在一个头文件中声明全局变量
extern Deck globalDeck;
和在cardgames.cpp
中定义Deck globalDeck;
解释:编译器必须先看到globalDeck
是什么,然后才能使用它。编译器主要是单独处理每个*.cpp,而不查看其他的。在头文件中,您可以说明程序中的内容,而无需给出完整和唯一的定义。
全局变量globalDeck
需要在使用它的每个编译单元(.cpp文件)中声明。需要在一个编译单元中定义。
形式的声明
Deck globalDeck;
既是声明又是定义。带有extern
的声明:
extern Deck globalDeck;
只是声明,不是定义。
头文件(.h文件)只是包含在#include
的其他文件中的文本。因此,您可以将声明extern Decl globalDeck;
放在头文件中(任何头文件),并将该头文件中的#include
放在每个.cpp文件中。您还需要在一个.cpp文件中定义该定义。
class Deck
没有在hand.cpp
中定义,因为缺少标头。您需要添加#include "hand.h"
或#include "deck.h"
。
- 未解决的外部链接问题
- CMake 无法链接外部库
- 外部"C"拆卸导致奇怪的链接器错误
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 链接外部C++外部C++ 在主文件中?
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 内联函数/变量的外部链接
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- C++ 链接器错误 LNK 2019 函数中引用的未解析的外部符号
- C 与 C++ 枚举链接与外部"C"
- 在 CMake 中链接外部 HDFql 库
- CURL 静态链接未解析的外部符号
- 在 Android Studio 中使用 NDK、Gradle 和 CMake 链接外部库
- CMake为什么通过相对路径链接外部库
- 如何使用 CMake 正确链接外部库
- 有没有办法在整个项目中包含和链接外部库,只编辑我的顶级 CMakeList
- Android:在Android Studio中链接外部静态C/C++库
- 链接外部变量 c++ 时出错
- 如何在llvm IR表示中链接外部库
- 在Android Studio (gradle)中链接外部库