使用->和*时,都无法通过迭代器访问类参数和函数。
搜索了大量线程无济于事。
除非添加更多详细信息,否则它不会让我提交问题,因此,hmm,co代表连接,并且整天都在仔细检查const和指针引用。
片段:
vector<Axon>::iterator ait;
ait=axl.begin();
const Neuron* co=ait->get_conn();
饮食可编译代码:
#include <iostream>
#include <vector>
using namespace std;
class Neuron;
class Axon;
class Neuron{
friend class Axon;
public:
Neuron(int);
void excite(double);
void connect(const Neuron *);
//void grow_ax();
private:
double _exc;
vector<Axon> axl;
};
class Axon{
friend class Neuron;
public:
Axon();
const Neuron* get_conn();
private:
double cond; //conductivity
const Neuron* connection;
};
Neuron::Neuron(int numax){
_exc=0;
vector<Axon> axl (numax,Axon());
}
Axon::Axon(){
cond=1;
connection=0;
}
void Neuron::connect(const Neuron * nP){
vector<Axon>::iterator ait;
ait=axl.begin();
const Neuron* co=ait->get_conn(); //error is here,
//if (ait->connection==0) these don't work
//ait->connection=nP; <===
}
const Neuron* Axon::get_conn(){
return connection;
}
int main(){
Neuron n1=Neuron(1);
Neuron n2=Neuron(0);
Neuron* n2p=&n2;
n1.connect(n2p);
}
提前致谢
最佳答案
ait=axl.begin();
const Neuron* co=ait->get_conn();
axl
不包含任何元素,因此,axl.begin() == axl.end()
会取消引用它。取消引用std::vector::end()
是未定义的行为。看一下你的构造函数:
Neuron::Neuron(int numax){
_exc=0;
vector<Axon> axl (numax,Axon());
// this is a declaration of local object
// which will be destroyed at the end of the constructor
}
另请注意,这是:
Neuron n1=Neuron(1);
Neuron n2=Neuron(0);
应该
Neuron n1(1);
Neuron n2(0);