gpt4 book ai didi

c++ - 如何使 char 数组在多个 .cpp 文件中可用?

转载 作者:行者123 更新时间:2023-11-28 02:20:30 24 4
gpt4 key购买 nike

我有一个工作程序,为了编辑目的必须分成多个部分。该程序需要将用户登录信息保存在 char 数组中以便能够连接到 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 << "INICIO\n";

function();
separated_function();
//something else with the mentioned variables...;

cout << "FIN\n";
return 0;
}

如何正确拆分,将 function()another_function()main() 放在单独的 .cpp 文件中,并使 serveruserpassdb 对所有这些都可用。

我知道肯定有很多方法,但任何有效的方法都足够好,因为到目前为止我还没有得到任何结果。

注意:这个问题不是关于如何在MySQL中使用变量,而是如何正确拆分程序。

最佳答案

您想在分离的源文件中使用 extern,或者在分离的源文件中包含的通用 header 中使用。您将在一个(且只有一个)cpp 文件中定义它们。这是一个例子:

主要.h

void function();
void seperated_function();

namespace myGlobals {
extern char server[];
extern char user[];
extern char pass[];
extern char db[];
}

主要.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.cpp\n";
std::cout << myGlobals::server << "\n";
std::cout << myGlobals::user << "\n";
std::cout << myGlobals::pass << "\n";
std::cout << myGlobals::db << "\n\n";
function();
seperated_function();
return 0;
}

函数.cpp

#include <iostream>
#include "main.h"

void function() {
std::cout << "function.cpp\n";
std::cout << myGlobals::server << "\n";
std::cout << myGlobals::user << "\n";
std::cout << myGlobals::pass << "\n";
std::cout << myGlobals::db << "\n\n";
}

分离函数.cpp

#include <iostream>
#include "main.h"

void seperated_function() {
std::cout << "seperated function.cpp\n";
std::cout << myGlobals::server << "\n";
std::cout << myGlobals::user << "\n";
std::cout << myGlobals::pass << "\n";
std::cout << myGlobals::db << "\n\n";
}

命名空间 myGlobals 不是必需的,但如果我要使用全局变量,我至少喜欢将它们放在自己的命名空间中。

关于c++ - 如何使 char 数组在多个 .cpp 文件中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32700265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com