C++ C++;-尝试在类中创建函数原型
我就是不明白为什么我的原型不能工作。当我将类放在main之上时,代码将运行,但当我尝试将其放在main之下并对函数进行原型化时,代码将不会运行。先谢谢你C++ C++;-尝试在类中创建函数原型,c++,function,class,C++,Function,Class,我就是不明白为什么我的原型不能工作。当我将类放在main之上时,代码将运行,但当我尝试将其放在main之下并对函数进行原型化时,代码将不会运行。先谢谢你 #include <iostream> #include <string> using namespace std; int whileLoop(); int main (){ myLoop myLoopObj; myLoopObj.whileLoop(); return 0; } class m
#include <iostream>
#include <string>
using namespace std;
int whileLoop();
int main (){
myLoop myLoopObj;
myLoopObj.whileLoop();
return 0;
}
class myLoop{
private:
int loop = 0;
int add = 0;
int total = 0;
public:
int whileLoop(){
while (loop <= 10){
cin >> add;
total = add+ total;
loop++;
if (loop==10){
cout << "you total is " << total;
}
}
}
};
#包括
#包括
使用名称空间std;
int whileLoop();
int main(){
myLoop myLoopObj;
myLoopObj.whileLoop();
返回0;
}
类myLoop{
私人:
int循环=0;
int add=0;
int-total=0;
公众:
int whileLoop(){
while(循环>添加);
总计=相加+总计;
loop++;
如果(循环==10){
cout您的主功能是运行您的程序的功能
您的类必须在首次使用之前定义
但是,如果您希望将main放在类之前,通常的方法是创建一个头文件并将其包含在main()之前。1)在调用任何类的成员函数(或声明为另一个类的成员)之前,必须先定义一个类。main
实例化myLoop
(这意味着调用作为成员函数的构造函数)并调用成员函数myLoop::whileLoop
。因此必须在main
之前定义myLoop
2) 您没有声明myLoop::whileLoop
成员函数。您声明了whileLoop
非成员函数。成员函数只能在类的定义中声明
好的,我尝试添加类myLoop;以及尝试myLoop:whileLoop;并尝试添加int-type,但没有任何效果,这是否意味着唯一的方法是从头文件开始
classmyloop;
只是一个没有定义的声明(转发声明)。因此,这是不够的。myLoop:whileLoop;
该声明不起作用。正如我所说,您需要在类的定义内声明成员函数
如果仅在该编译单元(源文件)中使用该类,那么如果不想使用头,您当然可以在那里定义它。但必须在声明类型的变量或调用其成员之前定义它。在您的案例中,在main之前。如果您需要在多个编译单元中使用该类并组织代码,头是非常方便的。您的原型在这里是不必要的,因为您正在定义在类内调用函数,然后从类内调用方法
通常,当您对类方法进行原型化时,您可以在类声明中这样做,这样您就可以单独定义方法。您不需要执行这两项操作,因此不需要“函数原型”
它不仅不需要,而且位置不正确。函数原型在main()
之前声明。方法原型在类声明中声明
您似乎希望能够在声明之前调用该类。如果要这样做,必须使用预处理器指令包含该类。否则,必须在main()
之前定义类
编辑:
我认为你把函数原型和类混淆了。类不是函数,所以你不能像对函数那样“原型化”一个类
您基本上有3种选择:
在main()之前声明类
使用#Include从单独的文件中包含类
在类定义中包含.h头文件
选项3有点像原型设计,但它与您试图做的不一样。不正确。声明它就足够了。@ChristianHackl否,您不能实例化尚未定义的类。@user2079303:是的,如果您使用任何成员函数,那么您需要定义。好的,我尝试添加了类myLoop;并且尝试了myLoop:whileLoop;并尝试添加int类型,但没有任何效果,这是否意味着唯一的方法是从头文件?@user207933“不,您不能实例化尚未定义的类。”这是错误的。您可以很好地实例化已声明的类。您需要完整的定义,以使链接器满意。类应在首次使用之前声明。阅读例如:好的,我尝试添加类myLoop;以及尝试添加myLoop:whileLoop;并尝试添加int类型,但没有任何效果,这是否意味着唯一的方法是从头文件?Ok我尝试添加类myLoop;以及尝试myLoop:whileLoop;并尝试添加int类型,但没有任何效果,这是否意味着唯一的方法是从头文件?@user207933“类myLoop;
只是一个声明,而不是一个定义”准确地说,这是一个正向声明。类声明意味着不同的东西。@πάνταῥεῖ 转发声明就是声明。我已经把我的答案说得更清楚了。哦,伙计,这听起来太疯狂了……所以没有简单的解决方案,因为我完全错了?@brigitte18对不起,让我简化一下;你可以在main之前声明你的类,或者“include”从一个单独的文件中创建类。您可以创建一个新的.cpp,在那里定义类,然后使用#include'myclass.cpp',例如.Ohhh好的,所以在.cpp和.h头文件中创建一个新类,并将其包含在main.cpp中。因此,这是在main.cpp运行时在main.cpp之前创建类原型并能够调用其中函数的唯一方法。th非常感谢您花时间解释。@brigitte18:是的,您也可以创建一个单独的类定义,但这是一个额外的步骤。您需要做的就是将类放在一个单独的文件中,并包含cpp文件。@MartynShutt“通常,当您创建类方法原型时,您在类定义中这样做。”,错了!这叫做类声明,类定义意味着实际的实现。