簡體   English   中英

將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM