错误:聚合'第一个'的类型不完整,无法定义

时间:2013-07-23 01:05:43

标签: c++ codeblocks

我已经写了这个头文件(header1.h)

#ifndef HEADER1_H
#define HEADER1_H

class first ;

//int summ(int a , int b) ;



#endif

和此源文件(header1.cpp and main.cpp)

#include <iostream>
#include "header1.h"

using namespace std;


class first
{
    public:
  int a,b,c;
  int sum(int a , int b);

};

  int first::sum(int a , int b)
{

    return a+b;
}

#include <iostream>
#include "header1.h"


using namespace std;


   first one;

int main()
{
   int j=one.sum(2,4);
    cout <<  j<< endl;
    return 0;
}

但是当我在codeblocks中运行此程序时,我会给出此错误:

  
    

聚合'第一个'的类型不完整,无法定义。

  

3 个答案:

答案 0 :(得分:7)

您不能将类声明放在.cpp文件中。你必须把它放在.h文件中,否则它对编译器是不可见的。编译main.cpp时,“first”类型为class first;。这根本没用,因为这对编译器没有任何意义(比如首先是什么大小或者这种类型的操作有效)。移动这个块:

class first
{
public:
    int a,b,c;
    int sum(int a , int b);
};

从header1.cpp到header1.h并删除header1.h中的class first;

答案 1 :(得分:1)

如果您也使用主要功能,只需在顶部定义类并稍后定义主要。没有必要显式创建单独的头文件。

答案 2 :(得分:0)

您需要在头文件中声明整个类(包含在实际使用该类的每个位置)。 OTERhwise,编译器不会知道如何在类中“查找”sum(或者它应该为类保留多少空间)。