Как сделать массив массивов доступным в нескольких файлах .cpp?

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

0

Решение

Вы хотите использовать 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 не требуется, но если я собираюсь использовать глобальные переменные, я по крайней мере хотел бы поместить их в свое собственное пространство имен.

2

Другие решения


По вопросам рекламы [email protected]