Объявление указателя в .h, создание экземпляра в .cpp, но не разрешено в других файлах проекта

Я пытаюсь объявить массив указателей на мой класс / объект Node в заголовочном файле, а затем в конструкторе для класса, в котором я хочу создать экземпляр размера массива. Затем я хочу инициализировать массив с помощью объекта Node.

Проблемы, с которыми я сталкиваюсь, связаны с правильным синтаксисом при первом объявлении массива Node в файле SOM.h. Я пытался просто быть Node* nodeArray а также Node* nodeArray[][some constant number], Не уверен, что один или оба из них являются правильным способом сделать это.

Затем в конструкторе SOM.cpp я инициализирую это таким образом nodeArray = Node[Config::NODE_GRID_HEIGHT][Config::NODE_GRID_WIDTH]

Затем я запускаю функцию инициализации для массива указателей узлов

void SOM::RandInitilizeNodeArray(){
srand (time(NULL));
for(int i=0; i<10; i++){
for(int j=0; j<10; j++){
nodeArray[i][j] = new Node();
nodeArray[i][j]->modelVec[0] = (rand() % 256)/255;//there is a uniform real distribution that gives better results
nodeArray[i][j]->modelVec[1] = (rand() % 256)/255;//THE 256 HERE MIGHT NEED TO BE 255
nodeArray[i][j]->modelVec[2] = (rand() % 256)/255;
}
}
}

Для каждого из 3-х раз, когда я пытаюсь получить доступ к модели Vec, я получаю «Поле», модель «невозможно разрешить» из затмения. Зачем? Я не объявляю массив указателей правильно, неправильно инициализирую, не обращаюсь правильно. Может быть, затмение просто ненавидит меня.

Вот еще код для просмотра.

SOM.h

#ifndef SOM_H
#define SOM_H

#include "Node.h"#include "LoadFile.h"//#include "LearningFunc.h"#include "Config.h"

#include <cstdlib>
#include <string>
#include "opencv2/core/core.hpp"#include <vector>
#include <iostream>
#include <stdio.h>
#include <opencv2/highgui/highgui.hpp>//FOR TESTING
//#include <highgui.h>class SOM{

public:

// Variables
Node* nodeArray;//[][Config::NODE_GRID_WIDTH];

//Node* nodeArray;
cv::Mat inputImg;
cv::Mat normalizedInputImg;
std::string filename;
cv::Mat unnormalizedInputImg;//FOR TESTING
cv::Mat outputImg;//LearningFunc thislearner();

// Functions
//Node* FindWinner(std::vector<uchar>);//send in a pixel vector get a winning node in return
void BatchFindWinner();
Node* SingleFindWinner(uchar*);
void NormilizeInput();
void InitilizeNodeArray();
void RandInitilizeNodeArray();
float GetSimilarity(uchar*, uchar*);
void AllocateNodeArray();
void OutputNodeArray();
void UnnormalizeInputImage();
void DisplayWins();
cv::Mat OutputSom();
void MyPause(std::string);//FOR TESTING
void WriteSomToDisk(std::string);// Constructors
SOM(){};
SOM(std::string);
~SOM(){};private:

};

#endif // SOM_H

SOM.cpp

SOM::SOM(std::string file){
filename = file;
inputImg = LoadFile(filename);
nodeArray = Node[Config::NODE_GRID_HEIGHT][Config::NODE_GRID_WIDTH];
//nodeArray = new Node[NODE_GRID_HEIGHT][NODE_GRID_WIDTH];
AllocateNodeArray();
InitilizeNodeArray();
//OutputNodeArray();//FOR TESTING
}

void SOM::RandInitilizeNodeArray(){
srand (time(NULL));
for(int i=0; i<10; i++){
for(int j=0; j<10; j++){
nodeArray[i][j] = new Node();
nodeArray[i][j]->modelVec[0] = (rand() % 256)/255;//there is a uniform real distribution that gives better results
nodeArray[i][j]->modelVec[1] = (rand() % 256)/255;//THE 256 HERE MIGHT NEED TO BE 255
nodeArray[i][j]->modelVec[2] = (rand() % 256)/255;
}
}
}

node.h

#ifndef NODE_H
#define NODE_H

#include <vector>
#include "Config.h"
class Node{

public:
//variables
//unsigned int location[2];//location of node in 2d grid
std::vector<unsigned int> winnerDataPixels;
uchar* modelVec;//functions//constructors

Node();
~Node(){};

private:};#endif //node.h end define

node.cpp

#include "Node.h"#include "Config.h"Node::Node(){
modelVec = uchar[Config::vectorLength];
}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]