【问题标题】:how do I access the return value of a pointer accessing a function? (converting code to gcc)如何访问访问函数的指针的返回值? (将代码转换为 gcc)
【发布时间】:2011-05-27 12:04:48
【问题描述】:

我想通过指针检索类函数的返回值。在这种情况下,返回值是一个向量(在类 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: error: no matching function for call to 'vec::vec(vec)'

一些背景知识:我正在将一些代码从在 Borland 上编译转换为 gcc(以前在 Borland 上运行良好)。我已经摆脱了大部分错误,但我仍然不明白为什么上面的代码不再有效。另外:

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

谢谢!

【问题讨论】:

    标签: class pointers gcc vector


    【解决方案1】:

    这可能意味着该向量显然无法复制,因此您无法返回 vec 值。最好在此处发布 GetA 函数的源代码。此外,切换到 C++ 标准库 std::vector 类可能会更好。

    【讨论】:

    • 谢谢。虽然这是完整的 GetA() 函数:vec model::GetA() {return a;} 我可能只是尝试切换到标准向量类,因为它导致了我的大部分问题。
    【解决方案2】:
    main.cpp:264: error: no matching function for call to ‘vec::vec(vec)’ 
    

    这意味着类 vec 没有复制构造函数。如果您可以更改代码,请添加一个: vec::vec(const vec&amp; r) {/*initialize data*/} 如果调用代码如您所说,那么我认为这是 gcc 中的错误。您可以通过使用其他构造函数之一构造 vec a 或在分配之前调用任何成员(如 .size() )来解决它。 如果您的代码实际上是vec a = /*stuff*/;,那么这是一个非常常见的优化,我不确定在这种情况下哪个编译器是错误的。

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2012-05-10
      相关资源
      最近更新 更多