【问题标题】:no known conversion from 'const int [5][4]' to 'const int **' in a constructor在构造函数中没有从 'const int [5][4]' 到 'const int **' 的已知转换
【发布时间】:2018-03-06 16:32:22
【问题描述】:

我有一个带有这个构造函数的类:

Dfa(const int n_state, const int dim_alf, const string *alf, const int s_state, const int** tt_copy );

我尝试像这样创建一个 dfa 对象:

const string alph[3] = {"a","b","c"};
const int ttable[5][4] = {1, 2, 4, 0, 3, 4, 1, 0, 4, 3, 2, 0, 4, 4, 4, 1, 4, 4, 4, 0};
Dfa reference_Tomita15 = new Dfa(5,3,alph,0,ttable);

这段代码给了我错误:

candidate constructor not viable: no
  known conversion from 'const int [5][4]' to 'const int **' for 5th argument

我做错了什么? 谢谢大家的关注

【问题讨论】:

  • 多维数组不会像一维数组那样衰减为指针 (stackoverflow.com/questions/12674094/…)。你能改变构造函数吗?
  • @Jens 严格来说,它们确实以与一维数组完全相同的方式衰减到指针。但生成的指针类型可能与您期望的不同:int [5][4] 变为 int (*)[4]
  • 感谢您的 cmets。不,我不能更改构造函数

标签: c++ constructor type-conversion implicit-conversion data-conversion


【解决方案1】:

如果可以的话,我会先为转换表创建一个类,然后将构造函数更改为使用它而不是 C 数组

class transition_table {
};

Dfa(int n_state, int dim_alf, const string& alf, int s_state, transtition_table tt)

如果你从一个静态分配的数组中创建它,你可以这样做

template<size_t DIM> Dfa(int n_state, const string& alf, int s_state, int (&tt)[DIM][DIM])

甚至更好

template<size_t DIM> Dfa(int n_state, const string& alf, int s_state, std::array<std::array<int, DIM>, DIM> tt)

我假设转换表是二次的。

【讨论】:

  • 非常感谢,这是一个非常好的观点,我会试一试:)
猜你喜欢
  • 2022-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多