C++ 参数与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

O有一个分配,我必须创建一个函数来提示用户输入文件名,并将输入传递回main。我必须把它作为一个参数传递(我假设这意味着通过引用)。我只是在第一个函数“GETFILNAMEAM”上工作。我知道C++中有更简单的方法来做这件事,但是我被指示这样做,我确信这里有一些有价值的东西可以学习,但我不理解。在任何情况下,我都能够让函数处理整数:

#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你有什么困惑吗?你还有什么问题吗?我知道我没有通过引用传递整数,因为我正在处理这个问题,我假设我需要做类似的事情。我们还没有讨论数组,当创建数组是正确的解决方案时,我试图通过引用传递文本。我把事情弄得更复杂了。再次感谢你的帮助。