首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨多个.cpp文件共享全局变量(visual 2015)

跨多个.cpp文件共享全局变量(visual 2015)
EN

Stack Overflow用户
提问于 2015-10-09 16:49:58
回答 2查看 1K关注 0票数 1

我正在visual中编写一个程序(c++),它具有多个函数,我想将其扩展到多个.cpp文件。最初,我的所有函数(整个程序)都包含在一个.cpp文件中,并且工作正常,但是现在,当我试图分解它时,我遇到了各种各样的错误。

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

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

此外,由于我编写的一些函数调用了我编写的其他函数,我如何将这些函数分解为单独的.cpp文件,并使所有功能仍然正常工作?在我想要调用它们的每个.cpp文件中,我是否应该原型所有必需的函数?

以下是我想要做的工作的一般格式:

main.cpp文件:

代码语言:javascript
复制
int main()
{
//calling functions such as minimax(),  printBoard(), and others
//using global variables such as const in w_ or const int pDisc
}

minimax.cpp文件:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
winDetect(){//definition}
playMove(){//definition}
printBoard(){//definition}
//using global variables such as const in w_ or const int pDisc

我还想在每个.cpp文件中包含以下头文件(不确定是否只需将这些文件复制并粘贴到每个.cpp文件中,或者是否有一种将它们全局包含的方法):

代码语言:javascript
复制
#include <string>
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <cstdlib>

提前感谢您的帮助!如果需要更多关于我如何组织这个项目的信息,请让我知道!

编辑:

我尝试设置一个头文件(名为con4.h),但在con4.h中的每个函数声明中都出现了一个错误,即“表达式必须有一个常量值”。对于某些声明,错误被抛出不止一次。下面是完整的代码:

代码语言:javascript
复制
#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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-09 16:57:54

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

yes.please也使用名称空间来对它们进行分组,以执行that.consider操作。

此外,由于我编写的一些函数调用了我编写的其他函数,我如何将这些函数分解为单独的.cpp文件,并使所有功能仍然正常工作?

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

比如说,在你的例子中:

代码语言:javascript
复制
//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

在面向对象的条件下,您可以通过创建板类、颜色类和algo类来实现上述逻辑,然后结合这些逻辑。

票数 0
EN

Stack Overflow用户

发布于 2015-10-09 16:56:27

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

请看这里,c++ including .cpp files

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33043474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档