【发布时间】:2014-12-14 15:39:36
【问题描述】:
在我的问题type as returntype in c++ 中,我得到了一个答案: 给了我这样的结构:
template <int N>
struct int_type {
using type = std::conditional_t<N <= 8, std::uint8_t,
std::conditional_t<N <= 16, std::uint16_t,
std::conditional_t<N <= 32, std::uint32_t,
std::conditional_t<N <= 64, std::uint64_t,
std::uintmax_t>>>>;
};
这似乎正是我所需要的,但实践看起来有何不同,因为由于以下错误,我无法编译它:
...Error: expected nested-name-specifier before 'type'
using type = std::conditional_t<N <= 8, std::uint8_t,
^
...Error: using-declaration for non-member at class scope
...Error: expected ';' before '=' token
using type = std::conditional_t<N <= 8, std::uint8_t,
^
...Error: expected unqualified-id before '=' token
我试图用谷歌搜索它,但我发现的帖子似乎都没有解决这个特定问题。谁能解释一下这段代码有什么问题?我对 C++ 很陌生
【问题讨论】:
-
conditional_t是 C++14 中引入的辅助类型。您是否使用-std=c++14标志进行编译? -
@PeterT 就是这样,
std::conditional_t是conditional::typeen.cppreference.com/w/cpp/types/conditional 的 typedef -
@vsoftco 我的错,我应该更仔细地阅读它
-
显然,该错误表明您甚至没有启用 C++11,更不用说
std::conditional_t所需的 C++14。它需要 using-declaration 语法,因此编译器在using之后需要 nested name specifier 的错误 -
我添加了 CONFIG += c++14 但仍然出现相同的错误。