gpt4 book ai didi

c++ - const char* 变量作为函数的参数

转载 作者:行者123 更新时间:2023-11-27 22:32:08 25 4
gpt4 key购买 nike

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

Variables(const char *s)

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

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

根据变量 loopOE 中的整数,我构造了一个字符串“xi”,其中 i 是 vector loopOE 中的第 i 个整数。例如是loops[0]=2,那么我们创建字符串“x2”,然后将其转换为const char *,然后传递给构造函数Variables(const char* s)。

我的函数 useful() 看起来像下面这样:

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: In member function 'void QSweepComplete::prealexMatrix()': QSweepComplete.cpp:975: error: 'varPolyConverted' was not declared in this scope make: *** [.obj/QSweepComplete.o] Error 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 对象并且你想要一个指向其中一个缓冲区的指针 - 该对象必须至少与指向其缓冲区的指针具有相同的范围,否则你会遇到未定义的行为。

关于c++ - const char* 变量作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com