簡體   English   中英

const char *變量作為函數的參數

[英]const char* variable as parameter to function

我在C ++庫中實現了此構造函數(由其他人而不是由我):

Variables(const char *s)

我想在自己的函數(有用的)中使用。 此函數有用(),計算要作為參數傳輸到構造函數Variables(const char * s)的int。

所以我將int轉換為字符串,然后轉換為const char *數據類型。 然后我將它們作為參數傳遞給Variables構造函數,但出現錯誤消息。

根據變量loopOE中的整數,我正在構造一個字符串“ xi”,其中i是向量loopOE中的第i個整數。 例如,loops [0] = 2,然后我們創建字符串“ x2”,然后將其轉換為const char * ,然后傳輸給構造函數Variables(const char * s)。

我的函數有用的()以以下方式顯示:

void useful(){
    vector<int> loopsOE;
    for (unsigned int i=0;i<6;i++)
          loopsOE.push_back(i);

for (unsigned int i=0;i<loopsOE.size();i++){
    //convering int to string
    std :: ostringstream sstreamComplete;
    sstreamComplete << loopsOE[i];
    std :: string loopsOEStr=sstreamComplete.str();
    //construct the string variable "xi" 
    string varPoly("x");
    varPoly.append(loopsOEStr);
    //converting the string to char*
    const char* varPolyConverted=varPoly.c_str()
}
std::vector< polynomial_t > Vec(myEdgesIntersect.size());
Variables V(varPolyConverted);
}

當我嘗試編譯此函數時,出現以下錯誤消息:

QSweepComplete.cpp:在成員函數'void QSweepComplete :: prealexMatrix()'中:QSweepComplete.cpp:975:錯誤:未在此范圍內聲明'varPolyConverted'使得:*** [.obj / QSweepComplete.o]錯誤1

仍然我不明白我是否可以通過以下方式用一個簡單的常量修改函數:

void usefulModified(){
    vector<int> loopsOE;
    for (unsigned int i=0;i<6;i++)
          loopsOE.push_back(i);

for (unsigned int i=0;i<loopsOE.size();i++){
    //convering int to string
    std :: ostringstream sstreamComplete;
    sstreamComplete << loopsOE[i];
    std :: string loopsOEStr=sstreamComplete.str();
    //construct the string variable "xi" 
    string varPoly("x");
    varPoly.append(loopsOEStr);
    //converting the string to char*
    const char* varPolyConverted=varPoly.c_str()
}
std::vector< polynomial_t > Vec(myEdgesIntersect.size());
    const char * str="x0";
Variables V(str);
}

該函數編譯並運行沒有任何問題。

如果有人有任何建議,我將不勝感激。

提前致謝。 最好的祝福,麥達利娜

varPolyConverted變量僅在循環內部可見,並且您嘗試在循環之后使用它-不允許這樣做,因為該變量當時不在范圍內。 這就是為什么編譯器拒絕編譯代碼的原因。

您必須更改代碼,以便僅在變量范圍內使用變量-可以在循環外聲明該變量,也可以在循環內調用該函數。

如果選擇前者要小心-您有很多STL對象,並且想要一個指向其中一個緩沖區的指針-該對象的作用域必須至少與其指向其緩沖區的指針相同,否則會遇到不確定的行為。

問題是您在for循環中聲明了varPolyConverted。

const char* varPolyConverted;

在for循環之前,然后執行以下操作:

 varPolyConverted = varPoly.c_str();

編輯:這將修復編譯時錯誤,但可能使您的指針懸空。 將函數調用與聲明變量的范圍放在同一范圍內會更好。

變量varPolyConverted的作用域在for循環內,無法在外部訪問。

您會收到錯誤消息,因為const char * varPolyConverted在塊內聲明。 您正在嘗試在該塊外部訪問它,在該塊外部不可見。

您可以在for循環之前定義它,然后在for循環之后也可以看到它。

在第二個循環之前聲明varPolyConverted

const char* varPolyConverted

在for循環中定義。 因此,在for循環之后,它不再是有效的聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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