[英]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.