![](/img/trans.png)
[英]How do you calloc a global variable to the size of input parameters in C++?
[英]input parameters on C++ file to a global variable
我想為全局變量提供一些外部參數。
我的實際代碼是:
static const char conn_str[] =
"user='postgres' password='' host='127.0.0.1' port='5432' dbname='database'";
pqxx::connection C(conn_str);
pqxx::nontransaction N(C);
而且我希望能夠使用argv參數來提供代碼,並且仍將連接C用作全局代碼。
有什么想法嗎? 提前致謝...
//I initialized
static const char conn_str[][150]="";
pqxx::connection* C(conn_str);
pqxx::nontransaction* N(C);
int main(int argc, char* argv[])
{
// code (....)
database=argv[4];
char data[]="dbname=%s user=postgres hostaddr=127.0.0.1 port=5432";
sprintf(conn_str,database);
C = new pqxx::connection(conn_str);
N = new pqxx::nontransaction (C);
OpenPSQL();
LoadHeader ();
LoadCustomers ();
LoadProducts ();
LoadTaxes ();
// code
delete C; //dont forget to delete it when you are done
delete N; //dont forget to delete it when you are done
}
我有這樣的錯誤:
main.cpp:在函數“ void OpenPSQL()”中:
main.cpp:268:錯誤:請求成員“ is_open”在“ C”中,該成員屬於非類類型“ pqxx :: connection *”
使用類似這樣的指針:
static const char conn_str[];
pqxx::connection* C;
int main(int argc, char** argv)
{
//... feed conn_str with argv here
C = new pqxx::connection(conn_str);
//... do whatever needs to be done
delete C; //dont forget to delete it when you are done
}
您已經將C
從對象更改為指針,因此,如果您真的想采用這種方法,則需要將成員訪問從C.whatever
更改為C->whatever
C.whatever
。 編譯器抱怨您正在申請.
而不是->
指向指針。
更好的方法是將變量本身移入main
,並通過引用需要它們的任何函數來傳遞它們。 然后,將自動管理它們的生命周期,並清楚地看到相關性。 全局變量幾乎從來都不是一個好主意。
另外,請使用std::string
而不是固定大小的緩沖區,因此,如果命令行參數過長,則不會溢出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.