c++ - 在 C++ 中通过文本传递参数

标签 c++ parameter-passing pass-by-reference

O 有一个作业,我必须在其中创建一个函数来提示用户输入文件名并将输入传回 main。我必须将它作为参数传递(我假设这意味着按引用传递。)我只是在处理第一个函数“getFileName”。我知道在 C++ 中有更简单的方法可以做到这一点,但我被指示这样做,我确信这里有一些有值(value)的东西可以学习,但我没有掌握它。在任何情况下,我都能够让函数像这样处理整数:

#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;
}

当我尝试将整数更改为文本时,我的问题出现了。我被告知要使用原型(prototype):

void getFileName(char []); 

我尝试的每件事都会给我错误,主要是与设置数组指针或设置数组引用等有关。我当前的代码如下所示:

#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;
}

我在使用 g++ 时遇到错误:

assign26.cpp:19: error: declaration of ‘fileName’ as array of references
assign26.cpp: In function ‘int main()’:
assign26.cpp:23: error: storage size of ‘fileName’ isn't known

虽然给我解决问题的代码将帮助我完成任务,但我确实想了解发生了什么,所以请解释解决方案。我非常感谢所有提供的帮助。

编辑

这是有效的代码,感谢本网站成员的所有帮助!

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;
}

问题:我不明白数组的功能。当我不需要时,我试图通过引用传递文本。还有我应该看到的语法错误。

最佳答案

函数原型(prototype)的签名与其实现的签名不匹配。您可能认为 char& x[] 与参数列表中的 char& x 相同,但实际上它们有很大不同。第一个声明一个字符引用数组,最后一个声明一个字符引用。标准不允许引用数组,因此这是不可能的,并且在这种情况下不需要通过引用传递数组(我怀疑您正在尝试这样做)。

在您的帖子中,您说过要插入文本。如果是这种情况,您只需要一个字符数组。您的签名现在应该类似于:

void getFileName(char fileName[]);

此外,在 main 中声明了一个未知边界的数组 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;
}

关于c++ - 在 C++ 中通过文本传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16874662/

相关文章:

c++ - Vector 只获取无重复元素

C++ 成员函数指针

c++ - 闰年程序似乎没有运行

python - 如何在python中实现引用列表?

c++ - 无法从 const char* 转换为 const char *&

c++ - Eclipse CDT Kepler 不允许 "Display as array..."

javascript - 如何在javascript函数中传递参数

c - 使用 "NA"将 R 数组传递给 C 函数

delphi - 如何在 Delphi 程序中将函数作为参数传递?

c++ - 数组是如何传递的?