【问题标题】:basic function overloading with pointer to parameters giving erros带有指向参数的指针的基本函数重载给出错误
【发布时间】:2014-04-22 16:43:55
【问题描述】:

这可能是函数重载的非常基本的问题,但我遇到了错误,因此在这里发布。下面是示例代码:

// 示例.cpp

struct A
{
   struct B
   {

   }b;

   struct C
   {

   }c;
};

set_data(B *b1)
{

}

set_data(C *c1)
{

}

set_data(A *a1)
{

   set_data(a1->c); // this line give error
   set_data(a1->b); // this line give error
}

我无法调用类型为 struct B 和 struct C 的 set_data 函数;它给出了错误。

谢谢

【问题讨论】:

  • 我建议退后一步,阅读一本 C++ 入门书籍。

标签: c++ function pointers struct overloading


【解决方案1】:

您的代码存在几个问题: 1. 您在结构 A 中定义结构 B 和 C 的事实导致它不能作为 B pr C 访问,您应该使用完整的限定名称 A::B 和 A::C
2.第二个问题是你在传递实际对象时期望一个指针,你可以通过获取对象的地址来解决这个问题

    void set_data(A::B *b1)

    void set_data(A::C *c1)

    void set_data(A *a1)
    {
        set_data(&(a1->c));
        set_data(&(a1->b));
    }

现在应该可以了。

【讨论】:

  • 您遇到了什么错误?你能发布你的编译结果吗?
  • error C2665: 'set_data' : 2 个重载都不能转换所有参数类型。收到此错误消息。 @IonutG
  • 您确定在 (a1->c) 和 (a1->b) 前面添加了 & 吗?这将获得成员的地址,因此期望指针的方法将起作用。
  • @lonutG -- 是的,我已经添加了,但它仍然给出错误......你的编译是否正确??
  • 是的,确实如此,但我使用的是 VC++ 编译器,你使用的是不同的东西吗?
【解决方案2】:

这段代码有很多错误。您收到编译错误的行应该是:

set_data(&a1->c);
set_data(&a1->b);

整个代码应该是:

  struct A
{
    struct B
    {

    }b;

    struct C
    {

    }c;
};

void set_data(A::B *b1)
{

}

void set_data(A::C *c1)
{

}

void set_data(A *a1)
{

    set_data(&a1->c); // this line give error
    set_data(&a1->b); // this line give error
}

void main()
{


}

【讨论】:

  • 其他函数定义也应该产生错误。
  • @Sumeet -- 我什至尝试了与上面发布的相同的答案.. 仍然错误.. 错误 C2665: 'set_data' : 2 个重载都不能转换所有参数类型
  • @juanchopanza:是的,函数定义产生了错误。
  • @user3382670:你必须指定函数定义的返回类型并且函数定义应该有这样的名字:"void set_data(A::B *b1)"
  • @Sumeet - 很抱歉没有正确放置代码。但即使做了所有的更正......仍然存在问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 2018-08-25
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多