У меня есть рабочая программа, которая должна быть разделена на несколько частей для целей издания. В этой программе необходимо хранить данные для входа в систему в массивах символов, чтобы иметь возможность подключаться к 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
, 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.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;
}
function.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";
}
seperated_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";
}
namespace myGlobals
не требуется, но если я собираюсь использовать глобальные переменные, я по крайней мере хотел бы поместить их в свое собственное пространство имен.