Программа, над которой я сейчас работаю, написана как скрипт, за исключением одного класса, который я использую (или пытаюсь) для связывания 3 переменных с друг друга. У меня есть класс под названием «SupNetModel», который содержит 3 разных значения, без методов класса. Этот класс объявляется как заголовочный файл, поскольку для него не существует каких-либо методов.Возвращение экземпляра класса, выделенного в куче (C++)
#ifndef SUPNETMODEL_H
#define SUPNETMODEL_H
class SupNetModel {
public:
//variables
SupNetModel();
};
#endif
Сокращенный вариант моей основной функции выглядит следующим образом:
#include "train.h"
#include "SupNetModel.h"
int main() {
//Some stuff
SupNetModel* model = Train(data,labels);
return 1;
}
Train.cpp выглядит следующим образом
#include "train.h"
SupNetModel* Train(arma::mat data, arma::mat labels) {
SupNetModel * model = new SupNetModel();
//Do a bunch of stuff
return model;
}
EDIT: Train.h выглядит следующим образом:
#ifndef TRAIN_H
#define TRAIN_H
#include <RcppArmadillo.h>
#include "SupNetModel.h"
SupNetModel* Train(arma::mat data, arma::mat labels);
#endif
Так что, по сути, я пытаюсь t o do - создать экземпляр моего класса в куче, а затем вернуть указатель на этот экземпляр, чтобы я мог получить доступ к нему в основном. Однако в настоящее время я получаю следующую ошибку: «SupNetModel» не называет тип «
Если это актуально, это выполняется с использованием RCpp в среде R. Строка ошибки, на которой ссылаются ошибки, находится в RcppExports.cpp, который автоматически генерируется. При прочтении этого файла (который содержит информацию о классах), похоже, что SupNetModel не отображается в RcppExports, кроме строки для объявления функции Train.
EDIT: Вот часть файла RCppExports, который имеет отношение:
// train
SupNetModel* train(arma::mat data, arma::mat labels);
RcppExport SEXP SupervisedNetworks_train(SEXP dataSEXP, SEXP labelsSEXP) {
BEGIN_RCPP
SEXP __sexp_result;
{
Rcpp::RNGScope __rngScope;
Rcpp::traits::input_parameter<arma::mat>::type data(dataSEXP);
Rcpp::traits::input_parameter<arma::mat>::type labels(labelsSEXP);
SupNetModel* __result = trainNetworkOfNetworks(data, labels);
PROTECT(__sexp_result = Rcpp::wrap(__result));
}
UNPROTECT(1);
return __sexp_result;
END_RCPP
}
А вот последние несколько строк, которые возникают при попытке построения проекта:
g++ -I/usr/share/R/include -DNDEBUG -I"/home/anne/LabWork/qpOASES-3.0.0/include" -std=c++11 -I"/usr/local/lib/R/site-library/Rcpp/include" -I"/home/anne/R/x86_64-pc-linux-gnu-library/3.1/RcppArmadillo/include" -fpic -O3 -pipe -g -c LS_LocalLaplacian.cpp -o LS_LocalLaplacian.o
g++ -I/usr/share/R/include -DNDEBUG -I"/home/anne/LabWork/qpOASES-3.0.0/include" -std=c++11 -I"/usr/local/lib/R/site-library/Rcpp/include" -I"/home/anne/R/x86_64-pc-linux-gnu-library/3.1/RcppArmadillo/include" -fpic -O3 -pipe -g -c RcppExports.cpp -o RcppExports.o
RcppExports.cpp:241:1: error: ‘SupNetModel’ does not name a type
SupNetModel* train(arma::mat data, arma::mat labels);
^
RcppExports.cpp: In function ‘SEXPREC* SupervisedNetworks_train(SEXP, SEXP)’:
RcppExports.cpp:249:9: error: ‘SupNetModel’ was not declared in this scope
SupNetModel* __result = train(data, labels);
^
RcppExports.cpp:249:22: error: ‘__result’ was not declared in this scope
SupNetModel* __result = train(data, labels);
^
RcppExports.cpp:249:68: error: ‘train’ was not declared in this scope
SupNetModel* __result = train(data, labels);
^
make: *** [RcppExports.o] Error 1
ERROR: compilation failed for package ‘SupervisedNetworks’
* removing ‘/home/anne/R/x86_64-pc-linux-gnu-library/3.1/SupervisedNetworks’
* restoring previous ‘/home/anne/R/x86_64-pc-linux-gnu-library/3.1/SupervisedNetworks’
Exited with status 1.
Что вызывает эта ошибка и как, по вашему мнению, ее можно решить?
Это не могло быть вашим файлом заголовка. В конце определения класса отсутствует конечная точка с запятой. Кроме того, это ваша функция main()? Если да, то где '#include" SuperModel.h "?? – PaulMcKenzie
Typo fixed (не было опечатки в моем действительном коде, к сожалению). – Anne
ОК, теперь вам нужно сказать, что такое «Поезд». Вы не сказали 'main', что существует функция' Train'. В C++ все функции должны быть объявлены или определены перед их использованием. – PaulMcKenzie