-1

我有个问题。

“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){
    ...
}
4

2 回答 2

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);

编辑:因为你已经大大改变了你的问题

现在您可以看到您正在传递的内容和位置,因此参数类型问题更加明显,例如 amount 被声明为 anint并被传递为 a float。这就是为什么我建议使用上述技术来减少您的代码不透明的原因。

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

于 2013-04-27T14:17:38.113 回答
0

您向构造函数传递了错误数量的参数。

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

于 2013-04-27T14:19:14.530 回答