2016-04-01 2 views
-2

Я уверен, что я, вероятно, делаю что-то глупое, но я занимаюсь этим полтора часа и не могу понять, что мне не хватает.Невозможно вызвать функции-члены

Я могу создать объект из своего класса, используя конструктор по умолчанию, но не могу использовать перегруженный конструктор при его добавлении. Я не могу вызвать функцию члена печати, которую я включил, или любые другие, которые я попытался включить. Я поместил эти три файла в проект Code :: Blocks и получил тот же результат. Я также пробовал три файла на Dev-Cpp с тем же результатом. Любая помощь будет принята с благодарностью.

Основная функция

#include <iostream> 

#include "Appt.h" 

using namespace std; 

int main() 
{ 
    Appt a(); 
    a.print(); 
} 

Appt.h

#ifndef APPT_H 
#define APPT_H 

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

class Appt 
{ 
    public: 
     Appt(); 

     void print(); 

    private: 
     string description; 
}; 

#endif // APPT_H 

Appt.cpp

#include "Appt.h" 

using namespace std; 

Appt::Appt() 
{ 
    description = "No Description"; 
} 

void Appt::print() 
{ 
    cout << description << endl; 
} 

Я использую Code :: Blocks 16.01 с GCC компилятором. Эти файлы в настоящее время не находятся в проекте. Я также работаю Windows 7.

+0

Точная ошибка - это неопределенная ссылка на любую функцию, к которой я пытаюсь получить доступ. –

ответ

3

Похоже, ваши проблемы могут быть связаны с этой линией:

Appt a(); 

К сожалению, в то время как это выглядит, как он вызывает конструктор по умолчанию, он фактически заявляет a быть типа Appt(), т.е. функция не принимает аргументов и возвращает Appt. Если вы хотите вызвать конструктор по умолчанию, есть несколько вариантов:

Appt a; 
Appt a = Appt(); 
Appt a{}; // requires C++11 

Я бы предпочел последний.

+0

О, отлично! Спасибо. К сожалению, это не устранило мою проблему. Теперь, когда я правильно его называю, он просто не находит конструктор по умолчанию. –