如何使字符数组在多个.cpp文件中可用
How to make char array available in multiple .cpp files?
我有一个工作程序,必须分成多个部分,用于编辑目的。该程序需要将用户登录信息保存在字符数组中,以便能够连接到SQL,并且该连接信息在程序的某些部分中多次使用,这些部分最终将以分离的。cpp文件结束,这些文件将在单个程序中编译。
问题是,如果它们只在一个文件中声明,那么它们将在其他文件中丢失,如果它们在所有文件中声明,则会有重复的定义。
那么,为了做一个具体而简单的例子,如果我有以下代码:#include <mysql++/mysql++.h>
#include <iostream>
using namespace std;
using namespace mysqlpp;
char server[] = "localhost";
char user[] = "root";
char pass[] = "xxxxxxx";
char db[] = "prog";
void function()
{
Connection con;
con.connect("", server, user, pass);
con.select_db(db);
//action1...;
}
void separated_function()
{
Connection con;
con.connect("", server, user, pass);
con.select_db(db);
//action2...;
}
int
main( int argc, char *argv[] )
{
cout << "INICIOn";
function();
separated_function();
//something else with the mentioned variables...;
cout << "FINn";
return 0;
}
如何正确分割,使function()
, another_function()
和main()
在分开的。cpp文件中,并使server
, user
, pass
和db
对所有人可用。
我知道肯定有很多方法,但是任何可行的方法都足够好了,因为到目前为止我还没有得到任何结果。
注意:这个问题不是关于如何在MySQL中使用变量,而是关于如何正确地分割程序
您希望在分隔的源文件中或在分隔的源文件中包含的公共头文件中使用extern
。您将在一个(且只有一个)cpp文件中定义它们。下面是一个例子:
main.h
void function();
void seperated_function();
namespace myGlobals {
extern char server[];
extern char user[];
extern char pass[];
extern char db[];
}
main.cpp
#include <iostream>
#include "main.h"
namespace myGlobals {
char server[] = "localhost";
char user[] = "root";
char pass[] = "xxxxxxx";
char db[] = "prog";
}
int main(int argc, char *argv[]) {
std::cout << "main.cppn";
std::cout << myGlobals::server << "n";
std::cout << myGlobals::user << "n";
std::cout << myGlobals::pass << "n";
std::cout << myGlobals::db << "nn";
function();
seperated_function();
return 0;
}
function.cpp
#include <iostream>
#include "main.h"
void function() {
std::cout << "function.cppn";
std::cout << myGlobals::server << "n";
std::cout << myGlobals::user << "n";
std::cout << myGlobals::pass << "n";
std::cout << myGlobals::db << "nn";
}
seperated_function.cpp
#include <iostream>
#include "main.h"
void seperated_function() {
std::cout << "seperated function.cppn";
std::cout << myGlobals::server << "n";
std::cout << myGlobals::user << "n";
std::cout << myGlobals::pass << "n";
std::cout << myGlobals::db << "nn";
}
namespace myGlobals
不是必需的,但是如果我要使用全局变量,我至少喜欢将它们放在它们自己的名称空间中。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 为什么我的主文件.cpp不打印头文件中的任何内容
- 生成文件错误 - 找不到文件 - *.cpp
- 如何在文件.cpp gtkmm中声明小部件
- 没有实现文件(.cpp)的派生类
- 如何使用"CMakeLists.txt"中的add_library将整个文件(.cpp,.h等)包含在目录中
- 如何在Linux / Windows操作系统上使用文件*.cpp一步编译下面的代码
- 关于 Linux .so 文件无法链接到主文件.cpp文件
- 文件.cpp从Windows到Linux
- Ubuntu C++ 编译器错误: g++: 错误: 文件.cpp: 没有这样的文件或目录
- 如何将文件.cpp编译为本机编译
- 使用模板类时,似乎无法包含除 main 以外的任何 cpp 文件.cpp
- 无法编译C++文件.cpp。C++98模式
- 为什么C++头文件不需要包含实现文件 (.cpp)
- 如何访问位于独立文件(.cpp)中的非成员函数
- 如何在Visual Studio Code中通过键盘快捷键切换头文件/cpp文件
- 如何将数据从stringstream写入文件(CPP)
- 为什么filestream不把空白写入文件cpp ?