我在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
答案 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循环之后它不再是一个有效的声明。