2015-05-22 43 views
0

我想爲全局變量提供一些外部參數。將C++文件中的參數輸入到全局變量

我實際的代碼是:

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: In function ‘void OpenPSQL()’:

main.cpp:268: error: request for member ‘is_open’ in ‘C’, which is of non-class type ‘pqxx::connection*’

回答

0

使用指針是這樣的:

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 
} 
+0

爲什麼使用原始指針? –

+0

不錯的做法,我做到了,有些事情做得不好。 –

+0

將此行更改爲以下內容,您正在使用指針指向它: N = new pqxx :: nontransaction(* C); – Sinapse

0

你變C從一個對象到一個指針,所以你需要改變成員訪問從01如果你真的想採取這種方法,請將改爲C->whatever。編譯器抱怨你正在向指針應用.而不是->

更好的方法是將變量本身移動到main,並通過引用將它們傳遞給任何需要它們的函數。然後他們的生命週期被自動管理,並且依賴關係清晰可見。全局變量幾乎不是一個好主意。

此外,使用std::string而不是固定大小的緩衝區,所以如果命令行參數太長,則不會發生溢出。

+0

非常感謝!我看到讓這段代碼更可靠的路有很長的路要走。 –