C++ C++;-尝试在类中创建函数原型

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

我就是不明白为什么我的原型不能工作。当我将类放在main之上时,代码将运行,但当我尝试将其放在main之下并对函数进行原型化时,代码将不会运行。先谢谢你

#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“通常,当您创建类方法原型时,您在类定义中这样做。”,错了!这叫做类声明,类定义意味着实际的实现。