通过使用头文件自学成才 - 寻求建议

时间:2016-10-27 14:54:16

标签: c++ class namespaces header-files

我自学了如何将头文件与.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

错误是&#39;你好&#39;不是FMMoore&#39;的成员。和&#39; GMMoore&#39;尚未宣布。

此外,我一直在检查拼写拼写错误和其他事情。我不知道为什么它没有宣布。

1 个答案:

答案 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,但该函数不是 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