Таинственное обращение? - PullRequest
0 голосов
/ 17 июня 2020

Хорошо, я пытаюсь понять внутреннюю структуру LinkedList и создал два класса: Node и LinkedList. По какой-то причине конструктор узла выдает int, а не узел.

Node* head; // throws " error: invalid conversion from 'int' to 'Node*' [-fpermissive]"
int whyDoesThisWork = new Node(); //by god this works

Первый случай раздражает, а второй на самом деле забавный. Вот мой Node.h:

#ifndef NODE_H_
#define NODE_H_

class Node {
public:
    Node();
    Node(int val);
    ~Node();
    int value;
    Node* next;
};

#endif /* NODE_H_ */

My Node. cpp:

#include "Node.h"
#include <stdlib.h>
Node::Node() {
    this->value = 0;
    this->next = NULL;

}
Node::Node(int val) {
    this->value = val;
    this->next = NULL;
}

Я абсолютно не понимаю, почему конструктор Node возвращает int. Любое понимание будет оценено

Edit Вот мой файл драйвера:

#include <iostream>
#include "LinkedList.h"
#include "Node.h"
using namespace std;

int main() {
  Node* head;
  int* val = new Node();
    return 0;
}

1 Ответ

4 голосов
/ 17 июня 2020

Node* head; - это просто объявление неинициализированного указателя, он не может вызвать ошибку преобразования.

int whyDoesThisWork = new Node(); не будет скомпилирован, потому что указатель не может быть назначен на int ( без явного приведения типа). Это несоответствие типов. Вы уверены, что компилятор на самом деле не говорит error: invalid conversion from 'Node*' to 'int' вместо этого?

int* val = new Node(); также не будет компилироваться, потому что указатель Node* не является указателем int*. Это также несоответствие типов.

C ++ - язык со строгой типизацией. Он не прощает несоответствий типов, если неявные преобразования не определены для рассматриваемых типов, что здесь не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...