C ++:当我定义运算符时,所有成员函数都给出了隐式定义错误

时间:2016-09-24 19:10:10

标签: c++ gcc compiler-errors

我在这里有一个正常的数字课程:

number.hpp

#ifndef NUMBER_HPP
#define NUMBER_HPP

#include <memory>

class Number
{
private:
     std::unique_ptr<int[]> mDigits;
public:
     // CONSTRUCTORS \\
     Number();
};

#endif

number.cpp

#include "number.hpp"

#define PRECISION 2048

Number::Number()
    :mDigits( new int[PRECISION]() )
{
}

当我添加以下运算符

number.hpp

#ifndef NUMBER_HPP
#define NUMBER_HPP

#include <memory>

class Number
{
private:
     std::unique_ptr<int[]> mDigits;
public:
     // CONSTRUCTORS \\
     Number();

     // CONST OPERATORS \\
     bool operator==( Number const& rhs ) const;
     bool operator!=( Number const& rhs ) const;
};

#endif

number.cpp

#include "number.hpp"

#define PRECISION 2048

Number::Number()
    :mDigits( new int[PRECISION]() )
{
}

bool Number::operator==( Number const& rhs ) const  
{
    for( int i = 0; i < PRECISION; ++i )
        if( mDigits[i] != rhs.mDigits[i] )
            return false;
    return true;
}

bool Number::operator!=( Number const& rhs ) const
{
    return !( *this == rhs );
}

我从GCC 5.4,GCC 6.2和CLANG idk

中收到以下错误
number.cpp:5:16: error: definition of implicitly declared constexpr Number::Number()
Number::Number()

error: number.cpp:12 no bool Number::operator==( const Number& rhs ) const member function declared in class Number

对于班级中的每个方法都是如此。这里发生了什么?

2 个答案:

答案 0 :(得分:1)

public:
     // CONSTRUCTORS \\
     Number();

     // CONST OPERATORS \\
     bool operator==( Number const& rhs ) const;
     bool operator!=( Number const& rhs ) const;

预处理器在处理过程中很早就会删除所有出现的反斜杠换行符(即行尾的\)。你最终得到的是:

public:
     // CONSTRUCTORS \         Number();

     // CONST OPERATORS \         bool operator==( Number const& rhs ) const;
     bool operator!=( Number const& rhs ) const;

然后将其解析为两条注释和一条声明,

     bool operator!=( Number const& rhs ) const;

解决方案:不要将\用作一行中的最后一个字符。只需撰写// CONSTRUCTORS// CONST OPERATORS

答案 1 :(得分:0)

评论中的\\会开始多行评论(请参阅here)。这会导致这两个函数(默认构造函数和运算符==)的声明真正成为头文件中的注释。