C++std::向量问题
C++ std::vector problems
我正在尝试将一些类从java移植到c++。
假设我们有两个类:
class ForwardNetwork {
protected:
ForwardLayer* inputLayer;
ForwardLayer* outputLayer;
vector<ForwardLayer* > layers;
public:
void ForwardNetwork::getLayers(std::vector< ForwardLayer* >& result ) {
for(int i= 0 ;i< layers.size(); i++){
ForwardLayer* lay = dynamic_cast<ForwardLayer*>(this->layers.at(i));
if(lay != NULL)
result.push_back(lay);
else cout << "Layer at#" << i << " is null" << endl;
}
}
void ForwardNetwork::addLayer ( ForwardLayer* layer ) {
if(layer != NULL)
cout << "Before push layer is not null" << endl;
//setup the forward and back pointer
if ( this->outputLayer != NULL ) {
layer->setPrevious ( this->outputLayer );
this->outputLayer->setNext ( layer );
}
//update the input layer and outputLayer variables
if ( this->layers.size() == 0 )
this->inputLayer = this->outputLayer = layer;
else this->outputLayer = layer;
//push layer in vector
this->layers.push_back ( layer );
for(int i = 0; i< layers.size();i++)
if(layers[i] != NULL)
cout << "Check::Layer[" << i << "] is not null!" << endl;
}
void ForwardNetwork::reset() {
std::cout<< "Network size#" << this->layers.size() << std::endl;
int index = -1;
for ( int i = 0; i< this->layers.size(); i++ ){
cout << "Layer[" << i << "] address#" << layers[i] << endl;
if(layers[i] != NULL){
layers[i]->reset();
}
else cout << "Layer NULL";
}
}
};
二等:
class Backpropagation : public Train {
public:
Backpropagation::Backpropagation ( ForwardNetwork* network ){
this->network = network;
vector<ForwardLayer*> vec;
network->getLayers(vec);
}
};
主要功能:
ForwardNetwork* network = new ForwardNetwork();
ForwardLayer* layer2= new ForwardLayer(2);
network->addLayer(layer2);
ForwardLayer* layer3 = new ForwardLayer(3);
network->addLayer(layer3);
ForwardLayer* layer1 = new ForwardLayer(1);
network->addLayer(layer1);
network->reset();
Train* train = new Backpropagation(network);
现在,如果我通过addLayer(..)方法从main()将一些层添加到网络中,一切都很好。我的矢量是应该的。但是,在我用网络对象调用Backpropagation()构造函数后,当我输入getLayers()时,vector中的一些对象的地址被设置为NULL(它们是随机选择的:例如,如果我在vector中运行了一次带有3层的应用程序,vector的第一个对象就是NULL。如果我第二次运行它,前2个对象是NULL,第三次只运行第一个对象NULL,以此类推)。现在我无法解释为什么会发生这种情况。我必须说,所有应该在向量中的对象,它们也生活在网络中,并且它们不是NULL;
在我完成addLayer()之后,这种情况到处都会发生,所以不仅仅是在getLayers()中。我不能很好地理解这个问题。我首先想到我可以修改向量。但我找不到这样的东西。此外,如果来自矢量的引用为NULL,那么作为链表(inputLayer和outputLayer)存在于ForwardNetwork内部的引用为什么不为NULL?
PS:作为编译器,我在ubuntu 11.10 下使用gcc 4.6.1的g++部分
没有理由需要ForwardNetwork::getLayers
内部的dynamic_cast
,除非您正在执行某种类型的多态类型转换,并且希望证明从中转换的指针类型可以转换为ForwardLayer*
类型。如果从一个ForwardLayer
指针分配给另一个,那么强制转换就不会失败。得到NULL
指针的事实意味着转换失败,我怀疑问题来自FeedforwardLayer
和ForwardLayer
之间的差异,但这里没有足够的代码来解释继承层次结构是如何构建的。
也就是说,您的NULL
指针不是错误地将指针添加到链表的结果,而是由失败的dynamic_cast
导致的。
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 添加存储在向量中的大整数的函数出现问题
- 尝试将向量初始化为类成员时出现问题
- 在将字符串放入字符串向量时遇到问题?
- 取消引用向量时出现问题
- 在C++中对结构向量进行排序时出现问题
- 在 c++ 中创建和访问 4D 向量时出现问题
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 使用指针向量(带代码)C++(以及对其使用的便利性的怀疑)时出现问题
- C++ 继承向量问题(无限循环+在其他类中使用向量的问题)
- 在 c++ 中访问列表向量时出现问题
- c++向量push_back问题
- shared_ptr类的向量的向量初始化问题
- SWIG c++到python:向量问题
- 在 Rcpp-Function 中使用布尔向量的子集(Rcpp 初学者的问题..)
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- 在构造函数中更新指针向量时出现问题
- 在使用 std::sort() 和 lambda 函数按属性对 ADT 的向量进行排序时遇到问题
- 为什么C++在自定义结构向量时会出现 ostream 重载问题?
- C++:问题向量 STL.