#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 Как я уже писал, вы должны определить статическую переменную из определения класса. Я также ссылался на демонстрацию, показывающую это.