#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
}