как получить доступ к возвращаемому значению указателя на функцию?(преобразование кода в GCC) - PullRequest
0 голосов
/ 27 мая 2011

Я хочу получить возвращаемое значение функции класса через указатель. В этом случае возвращаемое значение является вектором (определенным в классе vec) и возвращается методом GetA (). Однако приведенный ниже код выдает ошибку. Не можете ли вы присвоить значение функции, используя указатель таким образом?

#include<cstdio>
#include<string.h>
#include<stdlib.h>
#include<math.h>

#include "model.h"
#include "vector.h"

int main (int argc, char *argv[]) {
//some code

model *thisModel;

thisModel = new model(name, outName, fileFormat);
vec a;
a = thisModel->GetA();   //this is line 264

Функция GetA определена в модели класса как:

vec model::GetA() {return a;}

Я получаю сообщение об ошибке: main.cpp: 264: ошибка: нет соответствующей функции для вызова ‘vec :: vec (vec)’

Краткая справка: я преобразовываю некоторый код из компиляции на Borland в gcc (ранее он работал нормально с Borland). Я избавился от большинства моих ошибок, но до сих пор не понимаю, почему приведенный выше код больше не работает. Кроме того:

thisModel-> GetA();  //does not produce an error but does not return the vector I need

спасибо!

Ответы [ 2 ]

0 голосов
/ 03 августа 2011
main.cpp:264: error: no matching function for call to ‘vec::vec(vec)’ 

Это означает, что у класса vec нет конструктора копирования.Если вы можете изменить код, добавьте один: vec::vec(const vec& r) {/*initialize data*/} Если код вызова такой, как вы говорите, то я считаю, что это ошибка в gcc.Вы можете обойти это, создав vec с одним из других конструкторов или вызвав любой член (например, .size()) перед его назначением.Если ваш код на самом деле vec a = /*stuff*/;, то это очень распространенная оптимизация, и я не уверен, какой компилятор в этом случае неправильный.

0 голосов
/ 27 мая 2011

Это, вероятно, означает, что вектор, очевидно, не может быть скопирован, поэтому вы не можете вернуть значение vec.Было бы неплохо опубликовать источник функции GetA здесь.Кроме того, вам, вероятно, лучше переключиться на стандартную библиотеку C ++ std :: vector.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...