我已经发布了这个问题但不是最小,完整和可验证的。所以这又是: 给出以下5个非常小的文件:
的main.cpp
#include "bar.h"
#include <iostream>
int main()
{
const bar testBar;
testBar.barTest();
std::cin.get();
}
bar.h
#pragma once
#include "foobar.h"
class bar
{
public:
bar();
~bar();
void barTest() const;
private:
foobar* m_pFoobar;
};
bar.cpp
#include "bar.h"
bar::bar()
{
m_pFoobar = new foobar;
}
bar::~bar()
{
}
void bar::barTest() const
{
m_pFoobar->fooTest(*this);
}
foo.h中
#pragma once
#include "bar.h"
class foo
{
public:
virtual void fooTest(const bar& b);
};
foobar.h中
#pragma once
#include "bar.h"
#include "foo.h"
class foobar : public foo
{
public:
foobar();
~foobar();
void fooTest(const bar& b);
};
foobar.cpp
#include "foobar.h"
#include <iostream>
foobar::foobar()
{
}
foobar::~foobar()
{
}
void foobar::fooTest(const bar& b)
{
std::cout << "SUCCESS" << std::endl;
}
当我运行此代码时,VS2015告诉我以下内容:
Error C2664 'void foobar::fooTest(const int)': cannot convert argument 1 from 'const bar' to 'const int' bar.cpp 14
我不明白编译器用int
作为参数来解释我的函数的原因。我希望有人可以帮助我。