2012-12-18 31 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