如何使字符数组在多个.cpp文件中可用

How to make char array available in multiple .cpp files?

本文关键字:文件 cpp 何使 字符 数组      更新时间:2023-10-16

我有一个工作程序,必须分成多个部分,用于编辑目的。该程序需要将用户登录信息保存在字符数组中,以便能够连接到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, passdb对所有人可用。

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

注意:这个问题不是关于如何在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不是必需的,但是如果我要使用全局变量,我至少喜欢将它们放在它们自己的名称空间中。