我正在尝试使用内部类。我需要从嵌套类中调用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;
}
};
};
答案 0 :(得分:0)
当编译器读取
时Discriminant tempObject1;//here comes the error
行,Discriminant
的定义尚未完全解析(因此incomplete type
错误);只以最终;
结尾,关闭class Discriminant
语句。
不要求Discriminant
成为完全定义类型的理论解决方案是tempObject1
:
Discriminant*
Discriminant&
其中只有解决方案#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#没有实现这个奇怪的功能。您必须手动传递指针。