【问题标题】:Returning a C string stored in a class返回存储在类中的 C 字符串
【发布时间】:2016-06-09 23:44:03
【问题描述】:

我正在尝试通过使用访问器函数返回值来打印出存储在类中的 C 字符串。

感谢您的帮助!

这是我编译时遇到的错误:

cstringClass.cpp: In member function 'char Foo::get_name()':
cstringClass.cpp:37:9: error: invalid conversion from 'char*' to 'char' [-fpermi
ssive]
  return name;
         ^

代码如下:

#include <iostream>
#include <cstring>
using namespace std;

class Foo
{
    public:
        void set_name(char a[]);
        char get_name();

    private:
        char name[10];

};

int main()
{

    Foo bar;
    char a[10] = "Test";

    bar.set_name(a);

    cout << bar.get_name();


    return 0;
}

void Foo::set_name(char a[])
{
    strcpy(name, a);
}

char Foo::get_name()
{
    return name;
}

【问题讨论】:

    标签: c++ class return c-strings


    【解决方案1】:

    所以错误说:

    cstringClass.cpp: In member function 'char Foo::get_name()':
                                          ^^^^^^^^^^^^^^^^^^^^
    

    确实:

            char get_name();
    

    您将 get_name 声明为返回单个 char,而不是指向字符串的指针。你的意思可能是char *get_name();

    【讨论】:

      【解决方案2】:

      正如错误消息所述,您的get_name() 函数没有返回适当的类型,根据它返回的数据,它应该是char*,即name[10]char 只返回 1 个字节的数据,name[10] 有 10 个。请参阅下面的更正代码。

      #include <iostream>
      #include <cstring>
      using namespace std;
      
      class Foo
      {
      public:
          void set_name(char a[]);
          char *get_name(); //<-- correction
      
      private:
          char name[10];
      
      };
      
      int main()
      {
      
          Foo bar;
          char a[10] = "Test";
      
          bar.set_name(a);
      
          cout << bar.get_name();
      
      
          return 0;
      }
      
      void Foo::set_name(char a[])
      {
          strcpy(name, a);
      }
      
      char *Foo::get_name() //<-- correction
      {
          return name;
      }
      

      【讨论】:

        猜你喜欢
        • 2014-12-14
        • 2016-05-07
        • 1970-01-01
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 2011-04-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多