gpt4 book ai didi

c++ - 虚函数和 "no legal conversion for this pointer"

转载 作者:太空宇宙 更新时间:2023-11-04 15:30:54 26 4
gpt4 key购买 nike

我有两个类如下。

class NeuroShield
{
public:

NeuroShield();
uint16_t begin();

void setNcr(uint16_t value);
uint16_t getNcr();
void setComp(uint8_t value);
uint8_t getComp();
void setLastComp(uint8_t value);
void setIndexComp(uint16_t value);
uint16_t getDist();
void setCat(uint16_t value);
uint16_t getCat();
void setAif(uint16_t value);
uint16_t getAif();
void setMinif(uint16_t value);
uint16_t getMinif();
void setMaxif(uint16_t value);
uint16_t getMaxif();
uint16_t getNid();
void setGcr(uint16_t value);
uint16_t getGcr();
void resetChain();
void setNsr(uint16_t value);
uint16_t getNsr();
uint16_t getNcount();
void setPowerSave();
void forget();
void forget(uint16_t maxif);

void countTotalNeurons();
void clearNeurons();

void setContext(uint8_t context);
void setContext(uint8_t context, uint16_t minif, uint16_t maxif);
void getContext(uint8_t* context, uint16_t* minif, uint16_t* maxif);
void setRbfClassifier();
void setKnnClassifier();

uint16_t broadcast(uint8_t vector[], uint16_t length);
uint16_t learn(uint8_t vector[], uint16_t length, uint16_t category);
uint16_t classify(uint8_t vector[], uint16_t length);
uint16_t classify(uint8_t vector[], uint16_t length, uint16_t* distance, uint16_t* category, uint16_t* nid);
uint16_t classify(uint8_t vector[], uint16_t length, uint16_t k, uint16_t distance[], uint16_t category[], uint16_t nid[]);

void readNeuron(uint16_t nid, uint16_t model[], uint16_t* ncr, uint16_t* aif, uint16_t* cat);
void readNeuron(uint16_t nid, uint16_t nuerons[]);
uint16_t readNeurons(uint16_t neurons[]);
void readCompVector(uint16_t* data, uint16_t size);
void writeNeurons(uint16_t neurons[], uint16_t ncount);
void writeCompVector(uint16_t* data, uint16_t size);

uint16_t testCommand(uint8_t read_write, uint8_t reg, uint16_t data);

uint16_t fpgaVersion();
void nm500Reset();
void ledSelect(uint8_t data);

uint16_t total_neurons;

private:
uint16_t support_burst_read = 0;
};

另一个类是来自 opencv 的 Parallel_process。

class Parallel_process : public cv::ParallelLoopBody
{

private:
Mat gray_img;
Mat orig_img;
int size;
int row;
NeuroShield hnn;
vector<uint16_t> dists;
public:
uint16_t nm_cat, nm_nid;
Parallel_process(Mat inputImgage, Mat orgImg, int row_, NeuroShield &hnn_) : gray_img(inputImgage), row(row_), hnn(hnn_){}

virtual void operator()(const Range& range) const
{
for (int col = range.start; col < range.end; col = col +2)
{
uint8_t vector[NEURON_SIZE];
Mat roi_img = gray_img(Rect(col, row, size, size));
Mat res;
resize(roi_img, res, Size(16, 16), 0, 0, INTER_LINEAR);
uint8_t* data = (uint8_t*)res.data;
for (int j = 0; j < VECTOR_SIZE; j++)
vector[j] = *data++;
uint16_t nm_dist;
hnn.classify(vector, VECTOR_SIZE, &nm_dist, &nm_cat, &nm_nid);
dists.push_back(nm_dist);

}
}
};

在主函数中,并行进程被称为

cv::parallel_for_(cv::Range(0, 8), Parallel_process(inputImgage, orgImg, row_, hnn, dists_))

但是我在下面两行有两个编译错误。

hnn.classify(vector, VECTOR_SIZE, &nm_dist, &nm_cat, &nm_nid);
dists.push_back(nm_dist);

错误是

Error   C2663   'NeuroShield::classify': 3 overloads have no legal conversion for 'this' pointer    
Error C2663 'std::vector<uint16_t,std::allocator<_Ty>>::push_back': 2 overloads have no legal conversion for 'this' pointer

有什么问题吗?

最佳答案

您不能在调用实例的 const 限定函数中修改实例。*)

Parallel_process::operator()() 中移除 const 限定符。

*) 缺少声明为可变的成员。

关于c++ - 虚函数和 "no legal conversion for this pointer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53202569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com