const char * variable作为函数的参数

时间:2009-06-25 12:44:08

标签: c++

我在C ++库中实现了这个构造函数(由其他人而不是我):

Variables(const char *s)

我想在我自己的函数中使用,有用()。 这个函数有用(),计算一个int,我希望将它作为参数传递给构造函数Variables(const char * s)。

所以我将int转换为字符串,然后转换为const char *数据类型。 而且我将它作为参数传递给Variables构造函数,但是我收到了一条错误消息。

根据变量loopOE中的整数,我构造一个字符串“xi”,其中i是vector loopOE中的第i个整数。例如,loop [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'   make:*** [.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);
}

该函数编译并运行没有任何问题。

如果有人有任何建议,我将非常感谢他们。

提前致谢。 最好的祝愿, madalina

6 个答案:

答案 0 :(得分:3)

varPolyConverted变量仅在循环内可见,并且您尝试在循环后使用它 - 这是不允许的,因为此时变量超出了范围。这就是编译器拒绝编译代码的原因。

您必须更改代码,以便仅在其范围内使用变量 - 将其声明为循环或调用循环内的函数。

如果你选择前者要小心 - 你有很多STL对象,并且你想要一个指向其中一个缓冲区的指针 - 该对象必须至少具有与其缓冲区指针相同的范围,否则你会遇到未定义的行为。

答案 1 :(得分:2)

问题是你在for循环中声明了varPolyConverted。添加

const char* varPolyConverted;
在for循环之前

然后执行:

 varPolyConverted = varPoly.c_str();

编辑:这将修复编译时错误,但可能会留下一个悬空指针。将函数调用放在与声明变量的范围相同的范围内会更好。

答案 2 :(得分:0)

变量varPolyConverted的范围在for循环中,不能在外部访问。

答案 3 :(得分:0)

您收到错误,因为const char * varPolyConverted在块内声明。您试图在该块之外访问它,它在块之外是不可见的。

你可以在for循环之前定义它,然后它也会在for循环之后显示。

答案 4 :(得分:0)

在第二个循环之前声明varPolyConverted

答案 5 :(得分:0)

const char* varPolyConverted

在for循环中定义。 所以在for循环之后它不再是一个有效的声明。