2016-10-27 3 views
0

Я преподаю, как использовать заголовочные файлы с файлами .cpp. Я некоторое время работаю над этой проблемой и не могу понять. Кто-нибудь поможет мне решить две ошибки? Спасибо :)Самоучитель, используя заголовочные файлы - Поиск советов

driver.cpp

#include <cstdlib> 

using namespace std; 
#include "F.h" 
#include "G.h" 


int main() 
{ 

    FMMoore::hello(); 
    GMMoore::hello(); 

    system("pause"); 
    return 0; 
} 

F.cpp

#include <iostream> 
using std::cout; 
#include "F.h" 

namespace FMMoore 
{ 
    void hello() 
    { 
     cout << "hello from f.\n"; 
    } 
} 

F.h

#ifndef F_H 
#define F_H 

namespace FMMoore 
{ 
    class FClass 
    { 
    public: 
     void hello(); 
    }; 
} 

#endif // F_H 

G.cpp

#include <iostream> 
using std::cout; 
#include "G.h" 

namespace GMMoore 
{ 
    void hello() 
    { 
     cout << "hello from g.\n"; 
    } 
} 

G.h

#ifndef G_H 
#define G_H 

namespace GMMoore 
{ 
    class GClass 
    { 
    public: 
     void hello(); 
    }; 
} 

#endif // G_H 

Ошибки «привет» не является членом «FMMoore» и «GMMoore» не был объявлен.

Также я проверяю орфографическую опечатку и другие вещи. Я не знаю, почему он не объявил.

+3

Вам нужна книга на C++. –

+0

Да У меня есть книга, но не очень полезная книга – blacklune

+0

Вы пропустили определение области пространства имен. –

ответ

0

В F.h, hello объявляется как функция члена из FClass, который определяется в соответствии с FMMoore имен:

#ifndef F_H 
#define F_H 

namespace FMMoore 
{ 
    class FClass 
    { 
    public: 
     void hello(); 
    }; 
} 

#endif // F_H 

Однако в F.cpp, вы реализовали функцию hello под FMMoore пространство имен, но эта функция не a функция-член FClass:

namespace FMMoore 
{ 
    void hello() 
    { 
     cout << "hello from f.\n"; 
    } 
} 

Аналогично для G.h/G.cpp.

на основе кода в driver.cpp:

FMMoore::hello(); 
GMMoore::hello(); 

звучит, как вы хотите бесплатную функцию hello (а не функцию-член класса), так что вы должны исправить заголовки, например, для F.h:

#ifndef F_H 
#define F_H 

namespace FMMoore 
{ 
    // hello is a free function under the FMMoore namespace 
    void hello(); 
} 

#endif // F_H