C++ 错误:函数'void alpha(std::string*,student)';
好的,我想解释一下,在代码出现问题之前,我想做些什么。我正在创建一个学生记录系统。我正试图将信息从文本文件拉入记录系统。我试图使用堆上的数组来存储信息 我最关心的是前几个错误,因为我觉得这些错误会导致以下错误。任何帮助都将不胜感激,因为我已经浏览了许多论坛,但它们并没有引导我走向正确的方向。提前谢谢 代码:C++ 错误:函数'void alpha(std::string*,student)';,c++,C++,好的,我想解释一下,在代码出现问题之前,我想做些什么。我正在创建一个学生记录系统。我正试图将信息从文本文件拉入记录系统。我试图使用堆上的数组来存储信息 我最关心的是前几个错误,因为我觉得这些错误会导致以下错误。任何帮助都将不胜感激,因为我已经浏览了许多论坛,但它们并没有引导我走向正确的方向。提前谢谢 代码: 你真的需要在C++上得到教程或介绍性的文本。有太多的错误,我不知道从哪里开始。。。文件开头的#define没有任何意义(您的意图是什么?实际效果是预处理器将丢弃这些单词),您不应该通过指针处
<>你真的需要在C++上得到教程或介绍性的文本。有太多的错误,我不知道从哪里开始。。。文件开头的
#define
没有任何意义(您的意图是什么?实际效果是预处理器将丢弃这些单词),您不应该通过指针处理字符串(传递引用,如果可能是常量引用),您正在声明一个带有两个参数的tPrint
函数,用三个定义不同的tPrint
重载,最后一个是不正确的,因为alpha
不是一种类型。第一个和第二个参数(在预处理器替换之后)未命名,因此无法使用
所有这些在进入第一行实际代码之前…错误是:参数太少,无法执行函数
void alpha(std::string*,student)
。
当我们查找您键入的代码时:alpha(pArray)代码>。
但是函数签名是:void alpha(string*,student pArray)代码>
因此,将字符串作为参数传递将修复错误,但代码中还有许多其他错误:
- void tPrint(string*,student pArray,alpha)什么是alpha?我只看到一个空的房间
- 字符串新fName[sNUMBER];我不会编译。我想你的意思是
string*name=newfname[sNUMBER]代码>什么是fName
- 还有很多奇怪的事情
也许C++教程更适合你:
1)你的代码中的三个定义可能只是简单的错误< /P>
#define pArray
#define students
#define Request
string new fName[sNUMBER];
尤其是“pArray”,因为以后会将其用作参数名
2) 你在比较一个函数和零。这没有道理,因为测试总是会成功的
if (alpha != 0)
{
alpha(pArray);
}//end if
编辑:等等,我明白了,有一个(错误声明的)参数“隐藏”全局名称“alpha”。当然,这显然也不行,因为参数没有名称(“alpha”实际上是类型)
3) 正如David Thornley在一篇评论中所说的那样,您试图用一个参数调用函数,这显然无法工作,因为您用两个参数声明了它。(实际上您调用它时根本没有参数,因为pArray#define将“扩展”为空字符串)
4) 您试图用来声明变量的语法完全是错误的
#define pArray
#define students
#define Request
string new fName[sNUMBER];
我甚至不知道这是什么意思
而且可能还有更多…你的大问题是\define
s。你所做的就是将标识符定义为,字面上,什么都没有。如果有一个阵列
,现在什么都没有了。在C++中,任何一个从<代码> > <代码>开始的行都是一个预处理器命令,这意味着它对程序的文本进行操作。为了真正定义一个标识符,你只需要,本质上描述它
您正在使用pArray
作为函数参数,这意味着它的任何引用都不在外部范围内。如果预处理器像C++的任何其他部分一样,那么它就无害了,但是它只做文本替换。当您未能定义某些内容时,您可能希望让编译器告诉您
另一个问题是“论据太少”。您将alpha
声明为接受两个参数,但在tPrint
的早期调用时只传递一个参数
在你修复现有的错误之前,我不会检查其余的错误。一旦你删除了#定义s并自己阅读其他错误。请花点时间对问题中的代码进行适当的格式化(使用“{}”编辑器控件)。我不确定发生了什么。我会再试一次。接下来,阅读错误。您得到“太少的参数无法运行…alpha”的原因是因为您声明并随后用两个参数定义它,然后用一个参数调用它。如果纠正这些问题会导致进一步的问题,请回来询问我们。编辑已重新完成。很抱歉,{}控件引用了文本栏上的控件栏。它在一个大的公开报价之后,在一个看起来像显示器的东西之前。你不能仅仅通过在代码周围加大括号来格式化代码。我同意#define with pArray等是错误的。我在这个奇妙的网站上搜索,找到了它。谢谢你提供的信息。我会考虑所有这些。好吧,我知道我对新的线路做了一些错误的事情。FNEY是我名字的缩写版本,它是在我的名字.CPP文件中定义的。我同意在C++上找到附加文本,因为这是有史以来最棘手的事情之一。在过去的4个月里,我一直在毫无帮助的情况下自学这些东西。因此,为什么我的代码看起来很可怕。再次感谢你们带来的一切。我将研究这些问题并继续。谢谢你的帮助。我不希望有人把所有这些都整理好,因为这是我的问题。希望这足以让我开始并继续下去。