C++ 参数与C+中的文本一起传递+;
O有一个分配,我必须创建一个函数来提示用户输入文件名,并将输入传递回main。我必须把它作为一个参数传递(我假设这意味着通过引用)。我只是在第一个函数“GETFILNAMEAM”上工作。我知道C++中有更简单的方法来做这件事,但是我被指示这样做,我确信这里有一些有价值的东西可以学习,但我不理解。在任何情况下,我都能够让函数处理整数:C++ 参数与C+中的文本一起传递+;,c++,parameter-passing,pass-by-reference,C++,Parameter Passing,Pass By Reference,O有一个分配,我必须创建一个函数来提示用户输入文件名,并将输入传递回main。我必须把它作为一个参数传递(我假设这意味着通过引用)。我只是在第一个函数“GETFILNAMEAM”上工作。我知道C++中有更简单的方法来做这件事,但是我被指示这样做,我确信这里有一些有价值的东西可以学习,但我不理解。在任何情况下,我都能够让函数处理整数: #include <iostream> using namespace std; void getFileName(int &file
#include <iostream>
using namespace std;
void getFileName(int &fileName);
int main()
{
int fileName;
getFileName(fileName);
cout << fileName;
return 0;
}
void getFileName(int &fileName)
{
cout << "Please enter the filename: ";
cin >> fileName;
return;
}
我尝试的每件事都会给我带来错误,主要是设置指向数组的指针,或者设置对数组的引用等等。我当前的代码如下所示:
#include <iostream>
using namespace std;
void getFileName(char &fileName[]);
int main()
{
char fileName[];
getFileName(fileName);
cout << fileName;
return 0;
}
void getFileName(char &fileName)
{
cout << "Please enter the filename: ";
cin >> fileName;
return;
}
虽然给我解决问题的代码将帮助我完成任务,但我确实想了解发生了什么,所以请解释解决方案。我非常感谢所有的帮助
编辑
这里是代码的作品,感谢所有的帮助这个网站的成员
void getFileName(char fileName[]);
int main()
{
char fileName[256];
getFileName(fileName);
cout << fileName;
return 0;
}
void getFileName(char fileName[])
{
cout << "Please enter the filename: ";
cin >> fileName;
return;
}
void getFileName(charfilename[]);
int main()
{
字符文件名[256];
getFileName(文件名);
cout文件名;
返回;
}
问题是:我不理解数组是如何工作的。当我不需要的时候,我正试图通过引用传递文本。还有我应该看到的语法错误。您没有为文件名分配任何内存。因此,文件名不适合该(零长度)缓冲区。你需要像这样的东西 字符文件名[256]
此外,getFileName的函数原型与函数本身不匹配。使两个参数列表相同 函数原型的签名与其实现的签名不匹配。您可能认为
char&x[]
与参数列表中的char&x
相同,但它们实际上非常不同。第一个声明对字符的引用数组,最后一个声明对字符的引用。标准不允许使用引用数组,因此这是不可能的,并且在这种情况下不需要按引用传递数组(我怀疑您正在尝试这样做)
在你的帖子中,你说你想插入文本。如果是这种情况,您只需要一个字符数组。您的签名现在应该类似于:
void getFileName(char fileName[]);
char fileName[256];
此外,在main中声明一个未知绑定的数组fileName
。这是不允许的,因为您必须指定维度。比如:
void getFileName(char fileName[]);
char fileName[256];
但如果您不知道用户将输入多少个字符,则应动态分配数组。例如,使用std::string
:
#include <string>
void getFileName(std::string &);
int main()
{
std::string fileName;
getFileName(fileName);
}
void getFileName(std::string& fileName)
{
std::cout << "Please enter the filename: ";
std::cin >> fileName;
}
#包括
void getFileName(std::string&);
int main()
{
std::字符串文件名;
getFileName(文件名);
}
void getFileName(std::string和fileName)
{
std::cout>fileName;
}
char&fileName[]
声明为对char的引用数组。标准规定不能有引用数组。但无论如何,您都不需要这个来完成您正在做的事情。“fileName”的存储大小未知
只是因为您没有在这里指定大小char fileName[]代码>。原型和实现的签名不匹配。这是另一个问题。为什么不使用string
作为文件名,并使用string&
作为函数的参考?谢谢您的帮助!解决这些语法错误后,我仍然有错误,下面关于数组执行我希望它执行的操作的响应解决了我的问题。感谢您的澄清,我不知道简单地创建数组会产生与通过引用传递整数类似的效果。@user2443549您没有通过引用传递整数。这是一个字符数组char
@user2443549你有什么困惑吗?你还有什么问题吗?我知道我没有通过引用传递整数,因为我正在处理这个问题,我假设我需要做类似的事情。我们还没有讨论数组,当创建数组是正确的解决方案时,我试图通过引用传递文本。我把事情弄得更复杂了。再次感谢你的帮助。