-1

私は問題があります。

「IntelliSense: コンストラクター "Tree::Tree" のインスタンスが一致しない引数リストの引数の型は次のとおりです: (float [3]、float [3]、float、float、int、double、int、int)」。

3 行目:

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 が として宣言されたり、intとして渡されたりするなど、パラメーターの型の問題がより明確になりますfloat。これが、上記の手法を使用してコードをより不透明にすることを提案した理由です。

すべてのコードを再コンパイルしましたか?

于 2013-04-27T14:17:38.113 に答える
0

コンストラクタに渡した引数の数が間違っています。

多数の引数を持つコンストラクターまたはメソッドの場合、読みやすさを向上させ、このような間違いを避けるために、それぞれを別の行に入力することをお勧めします。

于 2013-04-27T14:19:14.530 に答える