ни один экземпляр constructor не соответствует списку аргументов, но я передаю nullptr конструктору, который принимает указатель и значение по умолчанию

#c #constructor

#c #конструктор

Вопрос:

Нам нужно создать полиномиальный класс для домашней работы, и я только начал писать свой.

Моя ошибка возникает в моем implementation/.cpp файл в конструкторе списка по умолчанию. В частности, ошибка гласит

ни один экземпляр конструктора «Polynomial::List::Node::Node» не соответствует списку аргументов — типы аргументов: (std::nullptr_t)

Это мой заголовочный файл

 #ifndef POLYNOMIAL
#define POLYNOMIAL

#include <vector>

class Polynomial {
public:
    Polynomial(); 
    Polynomial(std::vector<int>);
private:
    class List {
    public:
        List();
        void addToEnd(int); 
    private:
        struct Node {
            Node(Node*, int = 0);
            Node* next;
            int coefficient;
        }; 
        Node* head; 
        Node* last_node; 
    };
    List coefficients; 
    int degree; 
};

#endif
 

Это мой файл реализации

 #include "polynomial.hpp"
using namespace std; 

// Polynomial Constructors/Methods

Polynomial::Polynomial() : coefficients(), degree(0) {}

Polynomial::Polynomial(vector<int> coefficients) {}


// List constructors/Methods

Polynomial::List::List() : 
head(new Node(nullptr)) {} // error (as described in title) is happening on this line


// Node constructors/Methods
Polynomial::List::Node::Node(Node* next, int coefficient) 
: next(next), coefficient(coefficient) {} 
 

У меня такое чувство, что эта проблема связана с неправильной квалификацией моих конструкторов в моем .cpp-файле, поскольку я не уверен, в чем еще может быть проблема.

Тем не менее, я попытался написать проблемную строку как таковую, но я получаю ту же проблему:

 head(new Polynomial::List::Node(nullptr)) {}
 

Я знаю, что в StackOverflow уже есть множество вопросов, похожих на мои, но другие проблемы, которые я обнаружил, возникают из-за того, что люди полностью пропускают конструкторы или конструкторы, которые они используют, принимают аргументы, отличные от переданных. Насколько я могу судить, я использую конструктор структуры узла соответствующим образом.

РЕДАКТИРОВАТЬ: мне сказали, что это нормально скомпилировано в чужой системе. Кроме того, моя ошибка в виде красной загогулины, которая возникла без необходимости компиляции. Я предположил, что это означает, что у меня ошибка компиляции, которую VS code «поймал рано», но я не знаю, насколько это верно. Возможно, у меня проблема с моей конфигурацией VS Code или расширением C , которое я использую?

Комментарии:

1. Вопрос — если вы можете использовать std::vector , почему бы не использовать std::list вместо List класса?

2. Спасибо, это хороший момент. Мне не приходило в голову, что нам может быть разрешено пропустить реализацию списка самостоятельно, но я рассмотрю это. В любом случае, я понятия не имею, что не так с моим кодом как есть.

3. Предоставленный код компилируется для меня без предупреждений или ошибок.

4. Убедитесь, что это действительно ошибка компилятора, а не ошибка intellisense.

5. Красные закорючки могут что-то означать, а могут и нет. Если вы сомневаетесь, попробуйте скомпилировать вашу программу. Либо вы получаете жалобы компилятора (единственное, чему вы действительно можете доверять), либо вы обнаружили слабость вашей проверки синтаксиса. (Он не будет первым. Между тем, эти средства проверки синтаксиса не так уж плохи, но C — чертовски сложный язык в отношении компилятора.) В моей новой и обновленной Visual Studio 2019 я часто замечал, что неожиданные красные загогулины Intellisense исчезли в тот момент, когда я компилировал … 😉