gpt4 book ai didi

c++ - 为什么编译器说 "Static_cast from to which are not related"?

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:29 25 4
gpt4 key购买 nike

下面是我项目的完整代码(没有省略任何代码):

#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>

typedef enum{
MAJOR_BUTTON_IGNORED_FIRST = 0,
MAJOR_BUTTON_BLOCKS,
MAJOR_BUTTON_IGNORED_LAST,
}MAJOR_BUTTON_TYPE;


typedef enum{
BLOCK_IGNORED_FIRST = 0,
BLOCK_ORDINARY_SMASHABLE,
BLOCK_IGNORED_LAST,
}THING_TYPE;

class Datar{
private:
public:

MAJOR_BUTTON_TYPE majorType;
std::string majorButtonString;
std::vector<THING_TYPE>thingTypes;
std::unordered_map<THING_TYPE, std::string>thing2String;

Datar(){

}

virtual ~Datar(){};
virtual void initDatar(){};
};

class DatarBlock : public Datar{
private:
public:

virtual void initDatar(){
majorType = MAJOR_BUTTON_BLOCKS;
majorButtonString = "MajorButtonNames::blocks";

}

};

int main(int argc, const char * argv[]) {
// insert code here...
std::cout << "Hello, World!\n";
DatarBlock* db = new DatarBlock();
Datar* blah = static_cast<Datar*>(db); //Compiler error here ****
return 0;
}

在标记的行,有一个编译器错误:

main.cpp:62:19: Static_cast from 'DatarBlock *' to 'Datar *', which are not related by inheritance, is not allowed

为什么编译器会报错?

编辑:我正在使用 Xcode 7.2 (LLVM 7.0),C++ 标准库 = libc++(支持 C++11 的 LLVM 标准库),C++ 语言方言 = GNU++11

最佳答案

此代码在已发布的 C++11 中无效(没有 DR 2148),其中 std::hash 不专用于枚举类型(有关概述,请参见 http://en.cppreference.com/w/cpp/utility/hash )。然而,它通过 libstdc++ 4.6 被接受(我没有 libc++ 的版本号)。

C++14 获得了所需的特化,但它们并未在 libstdc++ 5 中实现。它们在 libstdc++ 6 中实现,参见 GCC bug 60970DR 2148 ,并且有意在 C++11 模式下可用。无论我使用的是什么版本的 libc++,确实仅在 C++14 模式下支持它们。

这是一个示例,说明为什么您需要按顺序查看所有 错误,因为较早的错误可能会使较晚的错误变得毫无意义。

关于c++ - 为什么编译器说 "Static_cast from to which are not related"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36785853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com