小编use*_*996的帖子

枚举错误:数字常量之前的预期标识符

我在源代码管理中添加了一个文件,其枚举定义为:

enum { OK = 0, ERROR };
Run Code Online (Sandbox Code Playgroud)

但在编译时,它抛出了诸如“数字常量之前的预期标识符”之类的错误。我对此进行了研究吗?罪魁祸首应该是“好的”,它是在代码的其他地方定义的。因此,我将“OK”更改为“OK_1”,问题确实得到了解决。

但是,我无法在我的代码库中找到之前定义的“OK”。我从顶层运行了 grep 但找不到它。我很确定我已经涵盖了所有与应用程序相关的代码,但是还没有。

我认为它不太可能是某些共享库的一部分,因为编译过程甚至没有达到链接阶段。它可能来自头文件之一。

有没有一种方法/Linux 工具可以以某种方式被欺骗来找到这个 OK 的来源?

c++ linux enums c-preprocessor

8
推荐指数
1
解决办法
2万
查看次数

从C++字符串转换为unsigned char*并返回

将std :: string转换为unsigned char*并返回的代码是什么?

str = "1234567891234567"
unsigned char* unsignedStr = ConvertStrToUnsignedCharPointer(str);
str1 = ConvertUnsignedCharToStr(unsignedStr);
Run Code Online (Sandbox Code Playgroud)

str并且str1必须相同而不会损失精度.

c++ string casting unsigned-char

2
推荐指数
1
解决办法
2965
查看次数

尝试使用 enable_if 启用 SFINAE 时出现“无法重载”错误

我只是std::enable_if在 C++ 中尝试使用 SFINAE 。我以为我理解了理论部分,直到我无法编译以下代码。更令人困惑的是 Visual Studio 和 Linux 上的不同行为。只要您不取消注释 ( Calculator<int> cInt;),此粘贴的代码就会在 VS 上编译。但是,使用 GCC 它会给我编译错误。我已经在 STL 实现中看到了这种代码,我真的很期待到处都有更标准化的实现。无论如何,您能否检查并建议我在这里的理解有什么差距?

template<typename T>
class Calculator
{
public:
    typename enable_if<is_arithmetic<T>::value, T>::type 
    addition(T a, T b)
    {
        return a + b;
    }
    typename enable_if<!is_arithmetic<T>::value, T>::type
    addition(T a, T b)
    {
        cout << "Default\n";
        return a;
    }
};

void SFINAE()
{
//  Calculator<int> cInt; 
}


int main ()
{
    SFINAE();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC 8.1 的错误日志:j

doodle.cpp:30:3: error: 'typename std::enable_if<(! std::is_arithmetic<_Tp>::value), T>::type …
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae template-meta-programming c++11

2
推荐指数
1
解决办法
314
查看次数