1

渡される引数を持つコンストラクターを作成しているときにエラーが発生します。以前のスレッドを検索しましたが、クリアされていません。

これが私のコードです:

#include<stdio.h>
#include<iostream>
#include<stdlib.h>

using namespace std;

int curr_state;
//int signal[3],trans_in[7],trans_fin[7],trans_sig[7];

class state_machine
{
        private :
                int start,end;
        public :
                state_machine(const int Q[],const int signals[],const int trans[][10][10],const int start,const int end);
//              int mystate();
                int run();
                int get_signal( );

                int get_state();
                int change_state();
};

state_machine::state_machine(const int Q[],const int signals[],const int trans[][10][10],const int start,const int end)
{
}     

int main(int argc, char * argv[])
{   
        state_machine s;
        int Q[5]={1,2,3,4,5};
        int signals[3]={0,1,2};
        int trans[][3][1]={{1,0,2},{1,1,0},{1,2,0},{2,0,3},{2,1,0},{2,2,0},{3,0,5},{3,1,4},{3,2,2},{4,0,2},{4,1,0},{4,2,0},{5,0,0},{5,1,0},{5,2,0}};
        int start=1,end=5;
        //s.state_machine(Q,signals,trans,start,end);
}   

次のように出力を取得します:

state_machine.cpp: In function ‘int main(int, char**)’:<br>
state_machine.cpp:27:16: error: no matching function for call to ‘state_machine::state_machine()’&lt;br>
state_machine.cpp:21:1: note: candidates are: state_machine::state_machine(const int*, const int*, const int (*)[10][10], int, int)<br>
state_machine.cpp:8:1: note:                 state_machine::state_machine(const state_machine&)
4

3 に答える 3

3

のコンストラクターはをstate_machine期待しint trans[][10][10]ます。transこれは、mainの配列のタイプと一致する必要があります。

メインをに変更する必要があります

int main(int argc, char * argv[])
{
    int Q[5]={1,2,3,4,5};
    int signals[3]={0,1,2};
    int trans[][10][10]={{1,0,2},{1,1,0},{1,2,0},{2,0,3},{2,1,0},{2,2,0},{3,0,5},{3,1,4},{3,2,2},{4,0,2},{4,1,0},{4,2,0},{5,0,0},{5,1,0},{5,2,0}};
    int start=1,end=5;
    state_machine s(Q,signals,trans,start,end);
    return 0;
}

の初期化子リストtransは必要なタイプに適合しませんが。

于 2012-12-18T07:03:13.413 に答える
1

指定した3D配列のサイズは正確に一致する必要がありますが、一致しません。エラーが言うようにそれは期待していますconst int (*)[10][10]

このエラーにint trans[][3][1]なった場合はなくなりますint trans[][10][10]

于 2012-12-18T06:46:57.563 に答える
1

まず第一に、state_machine s;パラメータなしのctorのボディが利用できないため、作成できません。

次に、最後の行を次のように呼び出す必要がありますstate_machine s(Q,signals,trans,start,end);

第三に、ctorに渡される3番目のパラメーターが正しくありません。3D配列の場合、インデックスは一致する必要があります。するint trans[][3][1]int trans[][10][10]またはその逆。

于 2012-12-18T06:56:40.413 に答える