4

我想在编译时而不是在预处理器中创建自己的警告(因为我已经看到了一些答案)假设我们有:

class A
{
private:
    explicit A(A const& other);
};

现在如果用户这样做:

A first;

接着:

A second(first);

他会得到一个错误,即未实现复制构造或其他什么......请记住我的代码中有很多继承......以及将我引向 H 文件 A 是在其中实现的,而不是我尝试过的地方使用复制构造函数...

所以..而不是编译器的默认警告,我想创建自己的.. 类似..“你不能使用复制构造函数”

帮助?谢谢!

4

2 回答 2

2

使用static_assert带有用户定义消息的 a 将在编译期间触发此错误消息

class A
{
private:
    A() {}

    explicit A(A const& /* other */) 
    { 
        static_assert(false, "You cannot use copy constructor"); 
    }
};

int main()
{
    A first;    
    A second(first); // compile error
}

LiveWorkSpace上的输出

请注意,这将产生错误而不是警告。但是,几乎总是最好使用“警告作为错误”编译器选项,并明确(即用注释记录)禁用您知道无害的警告。

于 2013-01-28T08:41:03.077 回答
1

没有预处理器,只使用标准 C++,这是不真实的。您可以使用static_assert,但这不是警告。

于 2013-01-28T08:40:28.163 回答