X 类型的值不能用于初始化 X 类型的实体

Posted

技术标签:

【中文标题】X 类型的值不能用于初始化 X 类型的实体【英文标题】:A value of type X cannot be used to initialize an entity of type X 【发布时间】:2018-07-16 06:38:06 【问题描述】:
struct Value 
    struct Array;
    struct Dict;
    struct Primitive;

    Value() 
    virtual ~Value() 

    virtual Array * asArray()  assert(false); 
    virtual Dict * asDict()  assert(false); 
    virtual Primitive * asPrimitive()  assert(false); 

    int asInt();
    double asDouble();
    std::string asDate();
    std::string asString();
;

struct Value::Array : public Value 
    std::vector<Value> m_data;

    Array() 
    ~Array() 

    Value::Array * asArray()  
        Value::Array * result = this; 
        return result;
    
;

Value::Array * result = this; 的声明给了我这个错误...

E0144 a value of type "Value::Array *" cannot be used to initialize an entity of type "Value::Array *".

【问题讨论】:

啊哈。我以为你在编辑之前说我愚蠢。这是否意味着我可以忽略它并且我的代码仍然可以编译? 我盯着这个,但我不知道 C++ 代码有什么问题。关于编译器,这些年来我不时看到这样的事情。 (我个人最喜欢的是:“bool is not compatible with bool”)看来连编译器构造函数都会出错... :-) 是的,这段代码应该可以正常工作。问题是智能感知使用自己的花哨的解析器,因此智能感知错误通常与编译器错误无关。 代码没有问题。我们应该始终能够区分编译器/链接器错误和 IDE 相关错误。 【参考方案1】:

这个问题可以在更简单的代码中看到

enum SPELLSTATUS  NEW, FAIL, OK  spellStatus = SPELLSTATUS::NEW;

enum SPELLSTATUS  NEW, FAIL, OK  spellStatus = NEW;

E0144   a value of type "SPELLSTATUS" cannot be used to initialize an entity of type "SPELLSTATUS"  NcEdit  D:\Systems\Editor2019\Spell.cpp 30  

VS2019. 

编译并运行良好。

【讨论】:

请编辑您的答案,以代码格式输入代码。

以上是关于X 类型的值不能用于初始化 X 类型的实体的主要内容,如果未能解决你的问题,请参考以下文章

"const char *" 类型的值不能用于初始化 "char *" 类型的实体

vs2017中char* str = "1234asd56";会报错,——const char*类型的值不能用于初始化char*类型的实体

不能用于初始化 const std::string * 类型的实体

char*”类型的值不能用于初始化“LPTSTR , Const char*”类型的值不能用于初始化“LPCTSTR

在LINQ to Entities中不支持指定的类型成员'x'。只支持初始化器实体成员和实体导航属性。

初始化字符*