简单的类构造函数初始化错误

时间:2014-02-17 20:50:14

标签: c++ visual-studio-2010 if-statement for-loop

在下面的代码中使用占位符名称可以有人请解释为什么我一直得到一个C2065(苹果未声明的标识符)和C2228(.weight / .colour / .price的左边)必须有class / struct / union?当然,如果变量与声明匹配,它应该继续经过while循环而没有问题。

int variable = (algorithm that creates a number);

if (variable == certain number)
{
fruitbag1 apple(40,50);
}
else if (variable == another certain number)
{
fruitbag2 apple(25,50);
}

else if (variable == another certain number)
{
fruitbag3 apple(30,50);
}

while (condition)
{
   while (another condition)
   {

   apple.weight();
   apple.colour();
   }
  apple.price();
}

我试过这个试图通过相同的错误来缓解问题无效:

int variable = (algorithm that creates a number);

if (variable == certain number)
{
fruitbag1 apple(40,50);
}
else if (variable == another certain number)
{
fruitbag2 apple(25,50);
}

else if (variable == another certain number)
{
fruitbag3 apple(30,50);
}

if (variable is within the range of the certain numbers)
{
    while (condition)
    {
       while (another condition)
       {

       apple.weight();
       apple.colour();
       }
      apple.price();
    }
}

找到解决方案:

更长,效率更低,但运作良好

int variable = (algorithm that creates a number);

if (variable == certain number)
{
fruitbag1 apple(40,50);

while (condition)
    {
       while (another condition)
       {

       apple.weight();
       apple.colour();
       }
      apple.price();
    }



}

if (variable == another certain number)
{
fruitbag2 apple(25,50);

while (condition)
    {
       while (another condition)
       {

       apple.weight();
       apple.colour();
       }
      apple.price();
    }
}

if (variable == another certain number)
{
fruitbag3 apple(30,50);
while (condition)
    {
       while (another condition)
       {

       apple.weight();
       apple.colour();
       }
      apple.price();
    }
}

3 个答案:

答案 0 :(得分:0)

找不到apple - 类。

确保您的主文件中有#include "apple.h"或类似内容。 否则,找不到apple类。 如果它在同一个文件中定义'确保它在上方上定义使用apple的函数。

答案 1 :(得分:0)

我不完全明白这里发生了什么。 但请注意apple大括号中不知道whiles实例。

这可能会回答C2065 (apple undeclared identifier)

如果你修复它也可以解决另一个问题。

例如,您可以这样做:

int variable = (algorithm that creates a number);
...
fruitbag1 *apple = new fruitbag1;
...
if (variable == certain number)
{
    *apple = apple(40,50);
}
...

while (condition)
{
   while (another condition)
   { 

   apple.weight();
   apple.colour();
   }
  apple.price();
}

所以现在它在花括号中已知......

它被称为scoping。 尝试搜索c++ scope

答案 2 :(得分:0)

问题是每个if-else语句都有自己的块范围。因此,if或else的复合语句中定义的任何变量都是局部变量,并且在控制将在相应的if或else复合语句之外传递之后将被销毁。

在此代码段之后

if (variable == certain number)
{
fruitbag1 apple(40,50);
}
else if (variable == another certain number)
{
fruitbag2 apple(25,50);
}

else if (variable == another certain number)
{
fruitbag3 apple(30,50);
}

这里名称苹果未知。