c ++: ошибка: доступ к элементу неполного типа, неиспользуемый параметр [-Werror, -Wunused-параметр] - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть следующий код:

class MyNode;

class MyCompare {
  public:
    bool operator()(MyNode *a, MyNode *b) {
        return a->q <= b->q ? true : false;
    }
};

class MyNode {

  public:

    double sum;    
    double q;

    StateNode *parent;
    std::priority_queue<MyNode, std::vector<MyNode>, MyCompare> children;
};

Но я получил следующие ошибки компиляции:

error: member access into incomplete type 'MyNode'
        return a->q <= b->q ? true : false;
                ^
..MyNode.h:35:7: note: forward declaration of 'MyNode'
class MyNode;
      ^
..MyNode.h:39:46: error: unused parameter 'b' [-Werror,-Wunused-parameter]
    bool operator()(MyNode *a, MyNode *b) {

Есть идеи, что я здесь не так сделал?Спасибо!

1 Ответ

0 голосов
/ 25 декабря 2018

Как сказано в сообщении об ошибке, a->q и b->q, т. Е. Использование оператора доступа к члену класса требует, чтобы тип MyNode был complete type .Только прямого объявления недостаточно.

Следующие типы неполные типы :

  • тип класса, который был объявлен (например, предварительным объявлением)но не определено;

и

Для любого из следующих контекстов требуется, чтобы класс T был завершен:

  • доступ к члену классаоператор применяется к выражению типа T;

Вы можете переместить определение operator() после определения MyNode, после чего MyNode будет завершено.например,

class MyNode;

class MyCompare {
  public:
    bool operator()(const MyNode *a, const MyNode *b) const;
};

class MyNode {

  public:

    double sum;    
    double q;

    StateNode *parent;
    std::priority_queue<MyNode, std::vector<MyNode>, MyCompare> children;
};

bool MyCompare::operator()(const MyNode *a, const MyNode *b) const {
    return a->q < b->q;
}
...