【问题标题】:Class object pointer won't assign to string类对象指针不会分配给字符串
【发布时间】:2013-02-11 00:23:13
【问题描述】:

我正在尝试将指针分配给这样的值

    string name;
    XMLSerial * ptr;

    if(name == "Armor")
    {
         ptr = &name;
    }

名称已提前初始化。 XMLSerial 是我编写的一个类。我正在尝试将一些 XML 反序列化为对象。如果名称是我定义的类或对象之一,我希望 XMLSerial 对象指针为对象创建空间。

我得到的错误是cannot convert std::string* {aka std::basic_string<char>*} to XMLSerial* in assignment

【问题讨论】:

  • 你希望上面的代码做什么?你为什么要指向一个 string 并带有一个指向完全不同类型的指针?
  • 您不能仅通过将指针 T1* 分配给指针 T2* 来反序列化 XML。
  • 你应该向我们解释为什么你认为它应该编译,因为这对我来说显然是错误的。
  • 哦,我知道为什么它不能编译了。我理解错误,我只是不知道如何解决它。我试图避免发布一英里的代码。在此代码之前,程序一次读入 xml 文件一个字符,然后一旦到达结束括号,就会设置名称值。然后我需要这个指针来比较名称和我必须处理的类的名称,如果名称匹配,则构造一个新的,将它分配给我传递给函数的指针。

标签: c++ string class object pointers


【解决方案1】:

您发布的代码应该完全按照您描述的方式失败。很难确切知道您在哪里偏离了轨道,但您的 XMLSerial 可能有一个您正在尝试使用的 operator=(std::string)

如果是这种情况,请将您的代码替换为:

string name;
XMLSerial xml;

if(name == "Armor")
{
     xml = name;
}

【讨论】:

    【解决方案2】:

    假设您的 XMLSerial 对象可以从 string 构造,这将起作用。

    string name;
    XMLSerial * ptr;
    
    if(name == "Armor")
    {
         ptr = new XMLSerial( name );
    }
    

    编辑:

    并且,正如评论的那样,处理指针和new/delete 有它们自己的责任。

    【讨论】:

    • 让我们小心在没有进一步信息的情况下将new 扔出去,在这种情况下,我想。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多