我有一个工作程序,出于编辑目的,必须分成多个部分。在这个程序中需要保持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文件中,并制作server
,user
,{ {1}}和pass
可以为所有人提供。
我知道必须有很多方法,但任何工作方式都足够好,因为到目前为止我还没有得到任何结果。
感谢您的帮助。
注意:这个问题不是关于如何使用MySQL的变量,而是如何正确地拆分程序。
答案 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}}不是必需的,但如果我要使用全局变量,我至少想把它们放在自己的命名空间中。