C++ 错误:类函数c+的多个定义+; 酒吧 福安 \ifndef FOO\H #定义FOO_H 分类栏; 福班 { Foo(int键,std::string str); 虚拟~Foo(); int-id; 标准:字符串指令; 公众: std::vector getbar(); std::vector getP(); std::vector get(); 受保护的: std::向量p; std::向量s; std::载体e; }; #恩迪夫 Bar.cpp #包括 #包括 #包括“Bar.h” Bar::Bar() { w=0; } Bar:~Bar(){} 空栏::设置值(Foo*m、Foo*n、into) { p=m; s=n; w=o; } 常量Foo*Bar::getP() { 返回p; } 常量Foo*Bar::getS() { 回报; } intbar::getW() { 返回w; } Foo.cpp #包括 #包括 #包括“Foo.h” Foo::Foo(int键,std::string str) { id=键; inst=str; } Foo::~Foo(){} std:vector Foo::getbar() { 返回e; } std::vector Foo::getP() { 返回p; } std::vector Foo::getS() { 返回s; }

C++ 错误:类函数c+的多个定义+; 酒吧 福安 \ifndef FOO\H #定义FOO_H 分类栏; 福班 { Foo(int键,std::string str); 虚拟~Foo(); int-id; 标准:字符串指令; 公众: std::vector getbar(); std::vector getP(); std::vector get(); 受保护的: std::向量p; std::向量s; std::载体e; }; #恩迪夫 Bar.cpp #包括 #包括 #包括“Bar.h” Bar::Bar() { w=0; } Bar:~Bar(){} 空栏::设置值(Foo*m、Foo*n、into) { p=m; s=n; w=o; } 常量Foo*Bar::getP() { 返回p; } 常量Foo*Bar::getS() { 回报; } intbar::getW() { 返回w; } Foo.cpp #包括 #包括 #包括“Foo.h” Foo::Foo(int键,std::string str) { id=键; inst=str; } Foo::~Foo(){} std:vector Foo::getbar() { 返回e; } std::vector Foo::getP() { 返回p; } std::vector Foo::getS() { 返回s; },c++,C++,我花了两天时间研究我能做的。我遵循了以下几点 -标题或include语句中没有*.cpp -仅在标头的 -*.cpp中的定义 -尝试在Bar.cpp->中添加#include“Foo.h”无效 -尝试在Foo.cpp->中添加#include“Bar.h”无效 -同时尝试了以上两个步骤->没有帮助 我现在迫切需要蒂姆,我真的需要帮助。谢谢您不能有两个同名函数,即使它们返回不同的值。尝试在其中一个类中为get()指定不同的名称 此外,如果这些类没有被其他类继承,则无需将析构函数设置为虚拟。即使返回

我花了两天时间研究我能做的。我遵循了以下几点 -标题或include语句中没有*.cpp -仅在标头的 -*.cpp中的定义 -尝试在Bar.cpp->中添加#include“Foo.h”无效 -尝试在Foo.cpp->中添加#include“Bar.h”无效 -同时尝试了以上两个步骤->没有帮助


我现在迫切需要蒂姆,我真的需要帮助。谢谢

您不能有两个同名函数,即使它们返回不同的值。尝试在其中一个类中为get()指定不同的名称


此外,如果这些类没有被其他类继承,则无需将析构函数设置为虚拟。

即使返回不同的值,也不能有两个同名函数。尝试在其中一个类中为get()指定不同的名称


此外,如果这些类没有被其他类继承,则无需将析构函数设置为虚拟。

栏中选中这一行。h

void设置值(Foo*m、Foo n、int o)

然后是Bar.cpp中的这个:

void Bar::setValues(Foo*m、Foo*n、into)


如果标题不匹配,您必须在
.hpp
中声明
Foo n
Foo*
,请在栏中检查这一行。h

void设置值(Foo*m、Foo n、int o)

然后是Bar.cpp中的这个:

void Bar::setValues(Foo*m、Foo*n、into)


如果标题不匹配,则必须在
中声明
Foo n
Foo*
。hpp

请粘贴您收到的准确、完整的链接器错误消息。这段代码中有几个小错误,应该在编译步骤出错,而不是链接步骤:这真的是从您测试的内容中剪切粘贴的,并且看到了相同的错误消息吗?不,我不能剪切粘贴,所以我手工输入。这是应该仔细思考的。因此,如果有错误,请让我知道。请张贴准确的错误消息。请粘贴您得到的准确、完整的链接器错误消息。这段代码中有几个小错误,应该在编译步骤出错,而不是链接步骤:这真的是从您测试的内容中剪切粘贴的,并且看到了相同的错误消息吗?不,我不能剪切粘贴,所以我手工输入。这是应该仔细思考的。因此,如果有错误,请告诉我。请发布准确的错误消息。我将Foo中同名函数的名称更改为与Bar不同。那是行不通的。同样的错误这很愚蠢。不同作用域中的名称(每个类都是一个作用域)并不冲突。我将Foo中同名函数的名称更改为与Bar不同。那是行不通的。同样的错误这很愚蠢。不同作用域中的名称(每个类都是一个作用域)不冲突。
#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
#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
#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;
}
    #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;
    }