2

C++コードに問題があります。に挿入する#include "god.hpp"neuron.hppg++次のエラーが表示されます。

In file included from neuron.hpp:4,
             from main.cpp:5:
god.hpp:11: error: ‘Neuron’ has not been declared
god.hpp:13: error: ‘Neuron’ was not declared in this scope
god.hpp:13: error: template argument 1 is invalid
god.hpp:13: error: template argument 2 is invalid
main.cpp: In function ‘int main()’:
main.cpp:36: error: no matching function for call to ‘God::regNeuron(Neuron*&)’
god.hpp:11: note: candidates are: long int God::regNeuron(int*)
In file included from god.hpp:5,
             from god.cpp:3:
neuron.hpp:10: error: ‘God’ has not been declared
In file included from neuron.hpp:4,
             from neuron.cpp:2:
god.hpp:11: error: ‘Neuron’ has not been declared
god.hpp:13: error: ‘Neuron’ was not declared in this scope
god.hpp:13: error: template argument 1 is invalid
god.hpp:13: error: template argument 2 is invalid

必要なファイルの関連(パーツ)は次のとおりです。

//main.cpp
#include <string>
#include <vector>
#include "functions.hpp"
#include "neuron.hpp"
#include "god.hpp"
using namespace std;

int main()
{
God * god = new God();

vector<string>::iterator it;
for(it = patterns.begin(); it != patterns.end(); ++it) {
    Neuron * n = new Neuron();
            god->regNeuron(n);
    delete n;
    cout << *it << "\n";
}
}

神;)すべてのニューロンを処理するのは誰か...

//god.hpp
#ifndef GOD_HPP
#define GOD_HPP 1 

#include <vector>
#include "neuron.hpp"

class God
{
public:
    God();
    long regNeuron(Neuron * n);
private:
    std::vector<Neuron*> neurons;
};
#endif

//god.cpp
#include <iostream>
#include <vector>
#include "god.hpp"
#include "neuron.hpp"

using namespace std;


God::God()
{
vector<Neuron*> neurons;
}

long God::regNeuron(Neuron * n)
{
neurons.push_back(n);
cout << neurons.size() << "\n";
return neurons.size();
}

そして少なくとも、私のニューロン。

//neuron.hpp
#ifndef NEURON_HPP
#define NEURON_HPP 1

#include "god.hpp" //Evil

class Neuron
{
public:
    Neuron();
    void setGod(God *g);
};
#endif

//neuron.cpp
#include <iostream>
#include "neuron.hpp"

#include "god.hpp"

Neuron::Neuron()
{
}

void Neuron::setGod(God *g)
{
std::cout << "Created Neuron!";
}

誰かが私がエラーを見つけるのを手伝ってくれることを願っています。#include "god.hpp"で書くと起こりneuron.hppます。グーグルで3時間くらい検索しましたが、運が悪かったです。

よろしく-ボリス

コンパイル済み:

g++ -Wall -o getneurons main.cpp functions.cpp god.cpp neuron.cpp
4

1 に答える 1

6

削除する

#include "god.hpp" 

それを前方宣言に置き換えます。

//neuron.hpp
#ifndef NEURON_HPP
#define NEURON_HPP 1

class God;  //forward declaration

class Neuron
{
public:
    Neuron();
    void setGod(God *g);
};
#endif

についても同じGod.hpp:

//god.hpp
#ifndef GOD_HPP
#define GOD_HPP 1 

#include <vector>

class Neuron; //forward declaration

class God
{
public:
    God();
    long regNeuron(Neuron * n);
private:
    std::vector<Neuron*> neurons;
};
#endif

実装ファイルにインクルードが必要になることに注意してください。(cppファイル)

オブジェクトへのポインターまたは参照をメンバーとして使用する場合、またはその型を戻り値の型またはパラメーターとして使用する場合、完全な定義は必要ないため、前方宣言で十分です。

于 2012-05-27T20:08:50.927 に答える