简体   繁体   English

c ++类中的指针数组

[英]array of pointer in c++ class

I want an array of pointers in a class. 我想要一个类中的指针数组。 This is the code I tried. 这是我尝试的代码。 But I get an error. 但是我得到一个错误。

class Msg{
    public:
      char *msg[2]={
                   "one",
                   "two",
                    "three"
                 };

//there are some other methods I want to write.....
 };


void main(){
     Msg msg;
//  i want to print msg[] here using a for loop
}

But it does not compile and shows an error in class and I also want to know how to access array of pointer which is a class member. 但是它不能编译,并且在类中显示错误,我也想知道如何访问属于类成员的指针数组。 Please correct the syntax if I am wrong. 如果我输入错误,请更正语法。

edit:[i want to do]

i have around 12 fixed messages, which are displayed according to situation, i set a enum to get correct index like. 我有大约12条固定消息,这些消息根据情况显示,我设置了一个枚举来获取正确的索引。

enum{
    size,
    area,
    volume,
    //etc 

}; };

class Msg have a function putMsg(int index) which cout required msg when i pass a enum. class Msg有一个函数putMsg(int index)其中cout需要MSG当我通过一个枚举。 if i pass area it will put a msg like "the area calculated by your equation is : " is there any better way to do this type of messaging. 如果我通过area ,它将放一个味精,例如“根据您的等式计算的面积为:”,是否有更好的方法来进行此类消息传递。

Try this: 尝试这个:

class Msg{
    public:

      // Can not initialize objects in the declaration part.
      // So just provide the declaration part.
      static char const *msg[];

      // Note: You had the completely wrong size for the array.
      //       Best to leave the size blank and let the compiler deduce it.

      // Note: The type of a string literal is 'char const*`

      // Note: I have made it static so there is only one copy.
      //       Since the strings are literals this should not affect usage
      //       But if you wanted one per class you need another technique.


    //there are some other method i want to write.....
};

// Now we can provide a definition.
// Note: I still leave the size blank and let the compiler deduce the size.
      char const* Msg::msg[]={
                   "one",
                   "two",
                    "three"
                 };  


// Note: main() must return an int.    
int  main(){
     Msg msg;
//  i want to print msg[] here using a for loop


    // The basic way
    for(std::size_t loop = 0;loop < sizeof(Msg::msg)/sizeof(Msg::msg[0]); ++loop)
    {
        std::cout << Msg::msg[loop] << "\n";
    }

    // Same as above but using C++11
    for(auto loop = std::begin(Msg::msg); loop != std::end(Msg::msg);++loop)
    {
        std::cout << *loop << "\n";
    }

    // using algorithms:
    std::copy(std::begin(Msg::msg), std::end(Msg::msg), std::ostream_iterator<char *const>(std::cout, "\n"));



     // Note: You don't actually need a return statement in main().
     //       If you don't explicitly provide one then 0 is returned.

}

This has little to do with that it's an array of pointers (BTW not a particularly good thing to use, consider std::vector<std::string> ) but with the way you're trying to initialise msg . 这与它是一个指针数组(BTW并不是特别好用,请考虑使用std::vector<std::string> )无关,但是与您尝试初始化msg的方式msg This is a (nonstatic) member variable, so you have to initialise it in your class' constructor, not at the place it's declared. 这是一个(非静态)成员变量,因此您必须在类的构造函数中初始化它,而不是在声明它的地方初始化它。

class Msg{
    public:
      char *msg[3];

      Msg()
        : msg{ "one"
             , "two"
             , "three" }
      {}

//there are some other method i want to write.....
 };

I suspect but I can't say for sure (you have not posted the actual error) that you are getting a "too many initializers error" . 我怀疑,但我不能肯定地说(您尚未发布实际错误),您会收到“初始化程序错误太多”的信息

Change *msg[2] to *msg[3] . *msg[2]更改为*msg[3] OR leave it BLANK. 或将其保留为空白。 []

Or remove "three". 或删除“三个”。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM