почему этот код генерирует неизвестную ошибку?

#c #class

#c #класс

Вопрос:

Я пытаюсь добавить новое Author в a Document , но получаю ошибку, похожую на эту 1:

 undefined reference to 'Document::numberofbjects'
 

Не могли бы вы сказать мне, что это за ошибка и почему я ее получаю?

 #include <iostream>
#include <string.h>
using namespace std;

class Author{
    string name;
public:
    Author(){}
    Author(string n){
       name = n;
    }
    string getname(){
        return name;
    }
};

class Document{
    string title;
    Author *authors;
    static int numberofbjects;
public:
    Document(string t,Author a[],int n){
       title=t;
        authors = a;
        numberofbjects=n;
    }
    void addauthor(Author a1){
        Author *ptr=new Author[numberofbjects 1];
        for(int i=0;i<numberofbjects;i  ){ //another question below 
            ptr[i]=authors[i];
        }
        ptr[numberofbjects]=a1;
        authors=ptr;
        numberofbjects  ;
    }
    void printAuthors(){
        for(int i=0;i<numberofbjects;i  ){
            cout<<authors[i].getname()<<endl;
        }
    }
    
};

int main()
{
    Author a1("Jony");
    Author a2("Jonson");
    Author array[2];
    array[0]=a1;
    array[1]=a2;
    Document D1("ARK",array,2);
    Author a3("Jonthan");
    D1.addauthor(a3);
    D1.printAuthors();
    
    return 0;
}
 

1 Ошибка была выведена из ответов и, вероятно, является ошибкой компоновщика

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

1. Пожалуйста, опишите, что происходит, почему вы думаете, что есть ошибка?

2. Для любых будущих вопросов об ошибках компилятора, пожалуйста, скопируйте и вставьте их в вопрос. «Неизвестная ошибка» абсолютно ничего не говорит нам о причине.

3. TBH, это static numberofbjects кажется неправильным. Вы сохраняете массив как нестатический элемент, а его длину — как статический элемент.

4. @churill когда вы пытаетесь использовать компилятор, он генерирует ошибки, но я не могу понять, что это

5. @MusabNuirat Вам не нужно понимать ошибки при обращении за помощью. В этом случае вы, вероятно, получили сообщение об ошибке компоновщика undefined reference to 'Document::numberofbjects' или подобное. Это сообщение многое говорит читателям о вопросе.

Ответ №1:

Вы объявили static переменную Document::numberofbjects , но не определили ее, поэтому этап компоновки завершится неудачей.

Добавьте это из определения класса:

 int Document::numberofbjects = 0;
 

ДЕМОНСТРАЦИЯ

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

1. ошибка: ISO C запрещает инициализацию в классе неконстантного статического элемента ‘Document::numberofbjects’

2. @MusabNuirat Как я уже писал, вы должны определить статическую переменную из определения класса. Я также ссылался на демонстрацию, показывающую это.