我有一个问题。
“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){
...
}
答案 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)
您已将错误数量的参数传递给构造函数。
对于具有大量参数的构造函数或方法,您可能希望在各自的行中键入每个参数,以提高可读性并避免出现此类错误。