在C ++中通过引用传递对象

时间:2014-01-29 14:32:43

标签: c++ pass-by-reference

我试图通过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 ++的新手。

3 个答案:

答案 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::