2012-12-18 48 views
0

我在寫一個具有一些要傳遞的參數的構造函數時出錯。搜索以前的線程,但我沒有得到清除。傳遞數組時調用時沒有匹配函數

這裏是我的代碼:

#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()’<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&) 
+0

我在上面的構造函數中使用了const關鍵字,因爲在搜索它們要求的某些線程之後,它沒有解決我的問題。 – Ajit

+0

嘗試將int trans [] [10] [10]更改爲int *** trans; –

+0

@Manoj
會將數據類似於trans [] [] []。如果是,那麼優勢是什麼? – Ajit

回答

2

你必須改變你的主讓

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初始化列表中不符合要求的類型。

+0

是的,這正是user1872084下面的評論所要求的。謝謝你們 – Ajit

1

您指定需要你的三維陣列的尺寸匹配準確,它沒有。由於錯誤說,它期待const int (*)[10][10]

如果int trans[][3][1]成爲int trans[][10][10]這個錯誤將會消失

+0

是的,這個改變當然也是必需的,也需要從main調用構造函數。感謝您的回覆 – Ajit

1

首先你不能創建state_machine s;因爲沒有身體構造函數W/O參數可用。

其次,你需要到最後一行調用爲state_machine s(Q,signals,trans,start,end);

第三,通過爲構造函數第三個參數不正確。對於3D數組,索引應該匹配。使int trans[][3][1]變爲int trans[][10][10],反之亦然。

+0

嗨,我沒有得到你的第一條評論「首先,你不能創建state_machine s;因爲沒有可用的參數的ctor無法正常工作。」假設如果有一些代碼寫在構造函數中主要是初始化參數,那麼它會有效嗎? – Ajit

+0

ohh ..我明白了。它是對象的初始化以及對構造函數的調用。謝謝 – Ajit

+0

正確...因爲您沒有通過任何「state_machine s」調用的參數,所以它會嘗試調用ctor,而不使用參數,這些參數在您的代碼中不可用。 – Nipun