没有构造函数C ++的实例

时间:2013-04-27 14:11:54

标签: c++ class constructor

我有一个问题。

  

“IntelliSense:没有构造函数的实例”Tree :: Tree“匹配   参数列表参数类型是:(float [3],float [3],float,   float,int,double,int,int)“。

第三行:

float ColorS[3]={1,1,1},ColorF[3]={1,0,0};
for(unsigned int i=0;i<20;i++){
    Tree a(ColorS,        ColorF,
           5.0f,          5.0f,
           rand()%180+90, 0.67,
           rand()%4+2,    rand()%6+2);
    las.push_back(a);
    a.cordx=rand()%50-25;
    a.cordz=rand()%50-25;
}

这是我在Tree.h的课程:

class Tree{
.
.
.
Tree(float [3],float [3],float,float,float,int,int);
.
.
.
};

那就是我在Tree.cpp中的建设者:

Tree::Tree(float fromColor[3], float toColor[3], 
           float h=5.0f,       float angle=60*rad,
           float ratio=0.67f,  int amount=4, 
           int maxLevel=5){
.
.
.

===

编辑:现在我遇到了这个问题:

  

'Tree :: Tree':没有重载函数需要5个参数

第二行:

for(unsigned int i=0;i<20;i++){
Tree a(5.0f,   1.0f,
       0.67f,   rand()%4+2,
       rand()%6+2);
    las.push_back(a);
    a.cordx=rand()%50-25;
    a.cordz=rand()%50-25;
}

这是我在Tree.h中的课程:

class Tree{
    ...
    Tree(float,float,float,int,int);
    ...
};

那就是我在Tree.cpp中的建设者:

Tree::Tree(float h=5.0f,       float angle=60*rad,
           float ratio=0.67f,  int amount=4, 
           int maxLevel=5){
    ...
}

2 个答案:

答案 0 :(得分:5)

您正在使用8个参数调用构造函数

Tree a(ColorS,        ColorF,
       5.0f,          5.0f,
       rand()%180+90, 0.67,
       rand()%4+2,    rand()%6+2);

但你用7

宣布了它
Tree::Tree(float fromColor[3], float toColor[3], 
           float h=5.0f,       float angle=60*rad,
           float ratio=0.67f,  int amount=4, 
           int maxLevel=5){

这是没有简洁代码的主要原因。你应该有很多空白,以便这样的事情变得明显。您可能(我不知道在您的情况下它是否有效)为h等参数设置更好的名称。此外,我倾向于发现这样的代码更容易阅读:

const float defaultH = 5.0f;
const float defaultAngle = 5.0f;
const float ratio = rand() % 180 + 90f;
const float amount = 0.67;
const float maxLevel = 5.0f;

Tree a(ColorS,     ColorF,
       defaultH,   defaultAngle,
       ratio,      amount ,
       rand()%4+2, maxLevel);

编辑:因为您已经相当改变了您的问题

现在您可以看到您传递的内容和位置,因此参数类型问题更加明显,例如将金额声明为int并作为float传递。这就是为什么我提出使用上述技术使你的代码不那么不透明的原因。

您是否重新编译了所有代码?

答案 1 :(得分:0)

您已将错误数量的参数传递给构造函数。

对于具有大量参数的构造函数或方法,您可能希望在各自的行中键入每个参数,以提高可读性并避免出现此类错误。