繁体   English   中英

在多个.cpp文件之间共享全局变量(Visual Studio 2015)

[英]sharing global variables across multiple .cpp files (visual studio 2015)

我正在Visual Studio中编写一个具有多个功能的程序(c ++),我希望这些功能可以分布在多个.cpp文件中。 我最初将所有功能(整个程序)都包含在一个.cpp文件中,并且工作正常,但是现在当我尝试对其进行分解时,我遇到了各种各样的错误。

我最初在单个.cpp文件的顶部定义了一些全局变量,但是现在当我将一些使用这些常量变量的函数移到单独的.cpp文件中时,出现错误。

如何在多个.cpp文件之间共享这些常量变量? 我是否应该创建一个包含所有常量全局变量的头文件,然后在使用它们的每个.cpp文件中以某种方式引用它们?

另外,正如我所写的某些函数调用了我所写的其他函数一样,如何将这些函数拆分为单独的.cpp文件,并使所有内容仍然有效? 我是否应该在每个要调用的.cpp文件中原型化所有必需的函数?

这是我要制作的一般格式:

main.cpp文件:

int main()
{
//calling functions such as minimax(),  printBoard(), and others
//using global variables such as const in w_ or const int pDisc
}

minimax.cpp文件:

void minimax()
{
//code for minimax function
//minimax () calls other functions such as winDetect() and playMove()
//using global variables such as const in w_ or const int pDisc
}

helper_func.cpp文件:

winDetect(){//definition}
playMove(){//definition}
printBoard(){//definition}
//using global variables such as const in w_ or const int pDisc

我还具有以下要包含在每个.cpp文件中的头文件(不确定是否只需要将它们复制并粘贴到每个.cpp文件中,或者是否可以在全局范围内包含它们):

#include <string>
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <cstdlib>

在此先感谢您的帮助! 如果需要有关我如何组织该计划的更多信息,请告诉我!

编辑:

我尝试设置头文件(称为con4.h),但是在con4.h中的每个函数声明中都出现错误,提示“表达式必须具有恒定值”。 对于某些声明,错误会多次抛出。 这是完整的代码:

#include <string>
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <cstdlib>

#ifndef CON4_H
#define CON4_H

//pDisc =  disc; cDisc = computer disc; nDisc = no disc
const int pDisc = 1, cDisc = 2, nDisc = 0;
//width and height variables
const int w_ = 7, h_ = 6;
//Base number of maximum iterations (depending on the stage in the game, recursion may go more or less deep)
const int MAX_ITER = 7;


//Values for SetConsoleTextAttribute()
HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE);

const int BLACK = 0;
const int BLUE = 1;
const int GREEN = 2;
const int CYAN = 3;
const int RED = 4;
const int MAGENTA = 5;
const int BROWN = 6;
const int LIGHTGRAY = 7;
const int DARKGRAY = 8;
const int LIGHTBLUE = 9;
const int LIGHTGREEN = 10;
const int LIGHTCYAN = 11;
const int LIGHTRED = 12;
const int LIGHTMAGENTA = 13;
const int YELLOW = 14;
const int WHITE = 15;

//Declarations (but not definitions) for all functions

#endif

您应该在标头中包含一个扩展名为.h的文件,这意味着将从您的cpp文件中复制代码并放入主文件中。

请在这里看看包括.cpp文件的c ++

我是否应该创建一个包含所有常量全局变量的头文件,然后在使用它们的每个.cpp文件中以某种方式引用它们?

是的。请这样做。也考虑使用名称空间对它们进行分组。

另外,正如我所写的某些函数调用了我所写的其他函数一样,如何将这些函数拆分为单独的.cpp文件,并使所有内容仍然有效?

通常,规范是通过将问题划分为易于管理的部分来开始设计程序。 这些部分中的每一个都可以实现为一个或多个功能。 通常,每个部分的所有功能都位于一个文件中。

说,就您而言:

//board.h

void printBoard(int board[][w_]);
void copyBoard(int board[][w_], int newBoard[][w_]);

//color.h

void printColor(string str, int color);
void printColor(int i, int color);
void printColor(char c, int color);

//algo.h

bool playMove(int board[][w_], int col, int who);
bool winDetect(int board[][w_], int who);
void minimax(int board[][w_], int score[], int who, int currentCheck, int iter);


//main.cpp
//include all header files and combine the logic

用面向对象的术语,您可以通过创建board,color和algo类,然后组合该逻辑来实现上述逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM