#c #compiler-errors
#c #ошибки компилятора
Вопрос:
У меня есть класс, который будет обрабатывать массив объектов другого класса, который я создал ранее (который отлично работает). Проблема возникает, когда я пытаюсь создать объект моего класса List.
Это заголовок класса list:
#ifndef personlistH
#define personlistH
#include "Person.h"
#include <iomanip>
#include <iostream>
#define SIZE 10
namespace std {
class PersonList {
private:
Person persons[SIZE];
int arrnum;
string filename;
public:
Personlist();
};
}
#endif
Это основная функция:
#include <iostream>
#include "PersonList.h"
using namespace std;
int main() {
PersonList personlist;
return 0;
}
Ошибка, которую выдает мне мой компилятор, заключается в следующем:
ошибка: «27 PersonList.h ISO C запрещает объявление `Personlist’ без типа»
Я искал ответы, но, поскольку я новичок в C , это немного сбивало с толку, и я пока не нашел подходящего варианта. Было бы здорово, если бы вы могли объяснить мне эту ошибку.
Ответ №1:
У вас неправильная капитализация в объявлении вашего конструктора. У вас есть Personlist();
, но нужно PersonList();
. Поскольку то, что у вас есть, не равно имени класса, оно считается функцией, а не конструктором, и для функции требуется возвращаемый тип.
Комментарии:
1. И вам также необходимо прекратить размещать свои собственные типы в пространстве имен std, что запрещено.
2. Исправление: существует другая ошибка, извините «.22 PersonList.h `Person’ не называет тип» Я предполагаю, что это может иметь отношение к исходному классу person?
3. Я ожидаю этого. Можете ли вы опубликовать содержимое Person.h? Сначала убедитесь, что Person не находится в пространстве имен, отличном от PersonList, что может вызвать проблему (если только оно не находится в корневом пространстве имен).
Ответ №2:
Не добавляйте свои собственные типы в стандартное пространство имен ( std
), вместо этого создайте свое собственное пространство имен и определите в нем свой класс.
//PersonList.h
namespace PersonNamespace
{
class PersonList
{
//members here
};
}
//Main.cpp
using namespace PersonNamespace;
Фактическая ошибка заключается в том, что вы допустили опечатку Personlist
вместо PersonList
Комментарии:
1. Таким образом, вы имеете в виду, что я должен сделать что-то подобное этому: пространство имен x { класс bla bla} …. затем используя пространство имен x; ?
2. Я изменил его на другое пространство имен, как вы показали, но ошибка все еще существует. :/
3. @MikeSeymour: Да, я заметил это чуть позже, первое, что я заметил, это нарушение того, что указано в стандарте в отношении расширяемого
std
пространства имен.4. Исправление: существует другая ошибка, извините «.22 PersonList.h `Person’ не называет тип» Я предполагаю, что это может иметь отношение к исходному классу person?
5. @cubsink: обратите внимание, что заглавная
L
буква вPersonList()
вас ошибочно напечатана как маленькая букваl
Personlist()
, измените это, и это сработает.
Ответ №3:
Ошибка заключается в том, что вы неправильно указали заглавную букву при объявлении конструктора; этого PersonList()
не должно быть Personlist()
.
Кроме того, вы никогда не должны объявлять свои собственные классы в std
пространстве имен; это зарезервировано для стандартной библиотеки. Вы должны создать свое собственное имя пространства имен и поместить в него свои вещи.