我试图通过const引用将一个对象(类Stock)传递给另一个类的函数(称为Algorithms)。
//Algorithms.h
#pragma once
class Algorithms
{
public:
Algorithms(void);
~Algorithms(void);
int Algorithms::doAnalysis(const Stock&);
};
doAnalysis的实现是
#include "StdAfx.h"
#include "Algorithms.h"
#include "Stock.h"
#include <vector>
using namespace std;
Algorithms::Algorithms(void)
{
}
Algorithms::~Algorithms(void)
{
}
int Algorithms::doAnalysis(const Stock &S)
{
//Do Something
return 0;
}
班级股票有以下构造函数
public:
Stock(std::string market, std::string symbol);
Stock(std::string market, std::string symbol, std::string start_date, std::string end_date);
我收到以下错误:
Error: declaration is imcompatible with "int Algorithms::doAnalysis(const<error-type> &)" declared at line 8 of Algorithms.h
我知道没有找到班级股票。我应该如何在Algorithms.h中声明doAnalysis方法以便找到它?股票不是派生类。
感谢您的帮助。我是C ++的新手。
答案 0 :(得分:7)
您必须添加类Stock
的前向声明:
// Forward declaration
class Stock;
class Algorithms
{
public:
Algorithms(void);
~Algorithms(void);
int doAnalysis(const Stock&);
// ^^ <- Remove the Algorithms::
};
您可以看到here为什么在C ++中需要转发声明。
答案 1 :(得分:1)
在你的班级声明之外加上一份前瞻声明:
class Stock;
class Algorithms
{
// ...
答案 2 :(得分:0)
您也可以在Algorithms.h文件中添加#include "Stock.h"
并从cpp文件中删除include。另外,在Algorithms.h的doAnalysis声明中你不需要Algorithms::