g ++错误:字段类型不完整

时间:2015-03-09 11:30:31

标签: c++ oop g++

我正在尝试使用内部类。我需要从嵌套类中调用get函数。我究竟做错了什么?谢谢你的时间!

   class Discriminant
{
private:
    float d;
public:
    void calcDiscr(int temp_a,int temp_b,int temp_c)
    {
        d = (temp_b^2)-4*temp_a*temp_c;
    }
    float get_d()
    {
        return d;
    }
    class Result
    {
    private:
        float x1,x2;
    public:
        Discriminant tempObject1;//here comes the error
        void calcResult(int temp_a,int temp_b,int temp_c)
        {
            cout<<"object's d = "<<tempObject1.get_d();
            x1 = (-temp_b+sqrt(tempObject1.get_d()))/2*temp_a;
            x2 = (-temp_b-sqrt(tempObject1.get_d()))/2*temp_a;
        }
        void displayResult()
        {
            cout<<endl<<"x1 = "<<x1;
            cout<<endl<<"x2 = "<<x2;
        }
    };
};

2 个答案:

答案 0 :(得分:0)

当编译器读取

Discriminant tempObject1;//here comes the error

行,Discriminant的定义尚未完全解析(因此incomplete type错误);只以最终;结尾,关闭class Discriminant语句。

不要求Discriminant成为完全定义类型的理论解决方案是tempObject1

  1. Discriminant*
  2. Discriminant&
  3. 其中只有解决方案#1是可行的。

答案 1 :(得分:0)

这是你的代码,它没有编译:

(SELECT `date`, `index`, idOne AS id, 'One' AS idType
 FROM   one
 WHERE  id = 5)
UNION ALL
(SELECT `date`, `index`, idTwo AS id, 'Two' AS idType
 FROM   two
 WHERE  id = 5)

问题是,正如haavee所报告的那样,当您尝试将其作为Result的成员时,判别式不会被解析(因而不完整)。

一种解决方案是使tempObject1成为指针,而不是值。

另一个解决方案是在判别后定义Result(我假设你想保持IMHO糟糕的内部类风格)。代码变为:

class Discriminant
{
    // etc.

    class Result
    {
        // etc.
        Discriminant tempObject1; //here comes the error
    };
};

这应解决您的编译问题。

P.S。:我错过了你问题的第一部分:

  

我正在尝试使用内部类。我需要从嵌套类中调用get函数。

我希望您使用嵌套类不是尝试使用Java的奇怪版本。

如果你希望你的内部类有一个像Java一样的外部类的指针/引用,你会感到很失望。这是Java的特色。 C ++和C#没有实现这个奇怪的功能。您必须手动传递指针。