2012-10-11 78 views
3

假设包含正确的标头。在构造函数中初始化数组或向量

我有一个计算器的各种功能类。我针对不同的运营商类型(空值,Unirary,二进制,三元)有几个结构。我想初始化一个向量(或者最好是一个数组),其中的元素填充为我的计算器支持的元素。例如nul[]={{pi, "pi"}, {ans, "ans"}};我的程序会从输入中取一个标记并搜索适当的操作符,返回该操作符的索引,然后调用正确的函数指针。我的问题是在构造函数中初始化一个数组或向量。如果有人能够向我展示两种方式,我会很感激。谢谢。以下是我的课程和未完成的构造函数。另外,如果你能想出一个更好的方式来写我的计算器,我很乐意听到它。

//operator class 
class Functions{ 
    public: 
     Functions(); 
     double pi(double x=0); 
     double answer(double& x); 
     double abs(double& x); 
     double pow(double& x); 
     double add(double& x, double &y) const; 
     double subtract(double& x, double& y) const; 
     double multiply(double& x, double& y)const; 
     double divide(double& x, double& y) const; 
     double max(double& x, double& y, double& z) const; 
     double volume(double& x, double& y, double& z) const; 
     void doc(); 
     bool weird(double &x) const; 
     unsigned findop0(const string & name); 
     unsigned findop1(const string & name); 
     unsigned findop2(const string & name); 
     unsigned findop3(const string & name); 
    private: 
     struct Nul{ 
      double (*nulf)(double & x); 
      string name; 
     }; 
     struct Uni{ 
      bool (*unif)(double & result, double x); 
      string name; 
     }; 
     struct Bin{ 
      bool (*binf)(double & result, double x, double y); 
      string name; 
     }; 
     struct Tern{ 
      bool (*terf)(double & result, double x, double y, double z); 
      string name; 
     }; 
     static const unsigned NUL_ELEMENTS = 2; 
     static const unsigned UNI_ELEMENTS = 2; 
     static const unsigned BIN_ELEMENTS = 4; 
     static const unsigned TRI_ELEMENTS = 2; 
     vector<Nul> nul; 
     vector<Uni> uni; 
     vector<Bin> bin; 
     vector<Tern> tri; 
}; 

Functions::Functions(){ 
    nul 
} 
+3

琐碎与C++初始化列表...否则只是在构造函数中使用'push_back'。 – nneonneo

+0

对于C++ 11而言,'vector'很容易。这比之前的情况要困难得多。 –

回答

3

在C++ 11中,您可以在初始化列表中的一行中执行此操作。

struct C { 
    int a[20]; 
    int* b; 
    std::vector<int> c; 
    std::array<int,20> d; 
    C() : 
    a({1,2,3}), 
    b(new int[20]{1,2,3}), 
    c({1,2,3}), 
    d(std::array<int, 20u>{1,2,3}) 
    {} 
}; 

在C++中使用03多分配或使静态函数来初始化向量或原始阵列。

struct C { 
    int a[20]; 
    int* b; 
    std::vector<int> c; 
    C() : 
    b(new int[20]), 
    { 
    a[0] = 1; ... 
    b[0] = 1; 
    c.push_back(1); 
    } 
}; 
+0

我讨厌成为一个麻烦,但它似乎仍然没有工作。函数::函数(): nul({{pi,“pi”},{&answer,“ans”}}),uni({{&abs,“abs”},{&pow,“pow”}} , \t bin({{&add,“+”},{&subtract,“ - ”},{&multiply,“*”},{&divide,“/”}}), \t tri “},{&卷,” 卷“}}) {}' 我不断收到错误告诉我 '错误错误C2143:语法错误:缺少 ';'之前'}'' – Painguy

+0

哪个编译器?它支持std :: vector的大括号初始化吗? – PiotrNycz

+0

另一个问题 - 你的函数必须是静态的以匹配你的结构函数类型。 – PiotrNycz