2

这是编译时返回的异常错误,只有一些编译器参数。

好的g++ -std=c++11 -m64 -O3 -DNDEBUG

但是随着g++ -std=c++11 -m64 -Wall -g,会出现这个问题:

宏“htonl”传递了 7 个参数,但只需要 1 个

代码:

const unsigned int h = htonl(hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash);

我不确定问题是来自调用htonl还是来自我的模板化哈希。

你知道怎么解决吗?

其他信息:

template<const char C0,         const char C1 =  '\0', const char C2 =  '\0', 
         const char C3  = '\0', const char C4 =  '\0', const char C5 =  '\0', 
         const char C6  = '\0', const char C7 =  '\0', const char C8 =  '\0', 
         const char C9  = '\0', const char C10 = '\0'>
struct CompileTime
{
    //Do you think this code could help?
};
4

2 回答 2

6

添加另一对大括号:

htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash))

于 2019-02-13T11:19:07.250 回答
1

一种解决方案是用额外的括号来帮助宏:

const unsigned int h = htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash));

解释为什么......这篇文章将帮助 C/C++ 宏中的逗号

这是宏内部逗号解释的问题。

于 2019-02-13T11:19:47.273 回答