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

时间:2015-09-21 16:33:59

标签: c++ class scope global-variables multifile

我有一个工作程序,出于编辑目的,必须分成多个部分。在这个程序中需要保持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文件中,并制作serveruser,{ {1}}和pass可以为所有人提供。

我知道必须有很多方法,但任何工作方式都足够好,因为到目前为止我还没有得到任何结果。

感谢您的帮助。

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

1 个答案:

答案 0 :(得分:2)

您希望在分隔的源文件中使用extern,或在分离的源文件中包含的公共标头中使用void function(); void seperated_function(); namespace myGlobals { extern char server[]; extern char user[]; extern char pass[]; extern char db[]; } 。您将在一个(也是唯一一个)cpp文件中定义它们。这是一个例子:

main.h

#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;
}

的main.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";
}

function.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";
}

seperated_function.cpp

namespace myGlobals

{{1}}不是必需的,但如果我要使用全局变量,我至少想把它们放在自己的命名空间中。