我在编写一个有一些参数要传递的构造函数时遇到错误。搜索过以前的主题但我没有清除它。
这是我的代码:
#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 :(得分: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
的初始值设定项列表不符合要求的类型。
答案 1 :(得分:1)
您指定的3D数组大小需要匹配完全,而不是。正如错误所说,期待const int (*)[10][10]
如果int trans[][3][1]
成为int trans[][10][10]
,则此错误将消失
答案 2 :(得分:1)
首先,你不能创建state_machine s;
,因为没有可用于ctor w / o参数的主体。
其次,您需要将最后一行称为state_machine s(Q,signals,trans,start,end);
第三,ctor传递的第三个参数不正确。对于3d数组,索引应该匹配。将int trans[][3][1]
设为int trans[][10][10]
,反之亦然。