Почему компилятор запрашивает инициализатор перед конструктором класса?

#c #class #constructor #declaration #initializer

#c #класс #конструктор #объявление #инициализатор

Вопрос:

Я создаю класс с именем SelectionPage. Который по сути представляет собой набор меню.

Однако, когда я компилирую код, компилятор выдает мне следующую ошибку:

 g   C_Main.cpp C_HomePage.cpp C_SelectionPage.cpp C_MemberManagement.cpp -o Project
C_SelectionPage.cpp:9:104: error: expected initializer before ‘SelectionPage’
make: *** [Project] Error 1
 

Вот первые несколько строк C_SelectionPage.cpp:

 #include "H_SelectionPage.h"


//Constructor for the SelectionPage class
//It assigns "managing" which decides if the user
//is a manager or not.
SelectionPage::SelectionPage(
    int newPoints,
    string newManager,
    string newLoginName,
    string MemberFile)
        SelectionPage(
            int newPoints,
            string newManager,
            string newLoginName,
            string MemberFile)
    {
        points = newPoints;
        manager = newManager;
        loginName = newLoginName;
        flatMemberList.clear();
        //Create Object Governing Flat Members.
        memberList = MemberManagement temp(MemberFile);
}
 

А вот объявление конструктора в заголовочном файле:

 SelectionPage(
    int newPoints,
    string newManager,
    string newLoginName,
    string MemberFile);
 

Не мог бы кто-нибудь, пожалуйста, объяснить мне, почему я получаю сообщение об ошибке?

Заранее спасибо.

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

1. Это действительно то, что у вас есть в вашем файле C ? SelectionPage::SelectionPage(int newPoints, string newManager, string newLoginName, string MemberFile )**SelectionPage**( int newPoints, string newManager, string newLoginName, string MemberFile){ ?

Ответ №1:

Если у вас действительно есть эта строка в вашем коде, вы, вероятно, скопировали конструктор дважды:

 SelectionPage::SelectionPage(int newPoints, string newManager, string newLoginName, string MemberFile )SelectionPage( int newPoints, string newManager, string newLoginName, string MemberFile){
 

Должно быть так:

 SelectionPage::SelectionPage(int newPoints, string newManager, string newLoginName, string MemberFile ){
 

Компилятор жалуется на список инициализаторов, потому что это то, что должно следовать за заголовком, а не другая копия списка параметров.

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

1. Я прошу прощения за свое невежество, я должен был заметить это… но после целого дня кодирования, я думаю, я просто не смотрел. Большое вам спасибо за то, что указали на мою ошибку.

Ответ №2:

попробуйте добавить спецификатор доступа перед SelectionPage

Ответ №3:

Вы можете выполнить часть инициализации в списке инициализации конструктора и выполнить остальную инициализацию в теле конструктора.

 SelectionPage::SelectionPage(
  int newPoints, 
  string newManager, 
  string newLoginName, 
  string MemberFile)
  : points(newPoints)
  , manager(newManager)
  , loginName(newLoginName)
  , memberList(MemberFile)
{
  // do the rest initialization here
}