错误:类函数c ++的多个定义

时间:2017-10-20 05:04:53

标签: c++

Bar.h

#ifndef BAR_H
#defind BAR_H

class Foo;

class Bar
{ 
    Bar();
    virtual ~Bar();

    public:
        const Foo* getP();
        const Foo  getS();
        int        getW();
        void       setValues (Foo* m, Foo n, int o);

    protected:
        Foo* p;
        Foo* s;
        int w;
};
#endif

foo.h中

#ifndef FOO_H
#define FOO_H

class Bar;

class Foo
{
                 Foo(int key, std::string str);
    virtual      ~Foo();
    int          id;
    std::string  inst;

    public:
        std::vector<Bar*>   getBars();
        std::vector<Foo*>   getP();
        std::vector<Foo*>   getS();

    protected:
        std::vector<Foo*> p;
        std::vector<Foo*> s;
        std::vector<Bar*> e;
};
#endif

Bar.cpp

#include <string>
#include <vector>
#include "Bar.h"

Bar::Bar()
{
    w=0;
}

Bar:~Bar() {}

void Bar::setValues(Foo* m, Foo* n, int o)
{
    p=m;
    s=n;
    w=o;
}

const Foo * Bar::getP()
{
    return p;
}

const Foo* Bar::getS()
{
    returns;
}

int Bar::getW()
{
    return w;
}

Foo.cpp中

    #include <string>
    #include <vector>
    #include "Foo.h"

    Foo::foo(int key, std::string str)
    {
        id   = key;
        inst = str;
    }

    Foo::~Foo() {}

   std:vector<Bar*> Foo::getBars()
    {
        return e;
    }

    std::vector<Foo*> Foo::getP()
    {
        return p;
    }

    std::vector<Foo*> Foo::getS()
    {
        return s;
    }

我花了两天时间研究我能做什么。我跟着以下 - 标题或包含语句中没有* .cpp - 只有标题中的声明 - * .cpp中的定义 - 尝试在Bar.cpp中添加#include“Foo.h” - &gt;没有帮助 - 尝试在Foo.cpp中添加#include“Bar.h” - &gt;没有帮助 - 同时尝试上述两个步骤 - &gt;没有帮助

我现在很紧张,真的可以使用帮助。谢谢

2 个答案:

答案 0 :(得分:1)

即使它们返回不同的值,也不能有两个具有相同名称的函数。尝试在其中一个类中为getS()提供不同的名称。

此外,如果这些类不被其他类继承,那么您不需要将析构函数设置为虚拟。

答案 1 :(得分:1)

Bar.h

中查看此行

void setValues (Foo* m, Foo n, int o);

然后在 Bar.cpp

中的这个

void Bar::setValues(Foo* m, Foo* n, int o)

然后标题不匹配,您必须在Foo n

中将Foo*声明为.hpp