【问题标题】:Creating a function which returns a class type [closed]创建一个返回类类型的函数[关闭]
【发布时间】:2015-07-28 13:25:13
【问题描述】:

我正在尝试创建一个具有Node 类类型的函数,并将Node 作为参数。 目前我有这个,它不起作用;

Node return_node (Node inNode)
{
    return inNode.print_values();
}

我已经在上面声明了一些节点,但不知道如何使用这个函数,我也不确定你是否可以制作一个将类型作为类的函数? 我希望能够创建一个函数,该函数采用我声明的类的类型。

print_values() 函数如下所示;

void print_values()
{
    cout << "A: " << A << "\nB: " << B;
}

【问题讨论】:

  • print_values 是否返回节点?
  • 这个函数到底应该做什么,print_values() 到底做什么,你的问题到底是什么?
  • @LiamMet,你写的(cout &lt;&lt; ...)不是return,它只是print。我建议你阅读 C++ 中的函数。
  • @LiamMet,那为什么它返回Node,而不是void
  • @LiamMet 你刚刚设置了你想要函数打印值,现在你说你想要它返回值 - 下定决心......另外,return_node 是一个不好的函数名称其目的是打印值

标签: c++ function class


【解决方案1】:

return_node() 现在是一个返回类 Node 值的函数。从您要执行的操作来看,您正在尝试打印 Node 的值,这些值可能包含整数、字符串等。print_values() 只是打印出字符串还是返回字符串,都不符合要求的功能。澄清一下,return_node() 需要返回 Node 类的一些东西。

如果您只是想打印出值(print_values 通过coutprintf 打印值),我建议将return_node 设为void 类型。但是,如果您想返回一个节点,请尝试输入return inNode。当您尝试编译它时,您会看到不会出现错误。

编辑:刚刚看到您所做的编辑。 print_values() 方法是否属于 Node 类?

【讨论】:

  • 是的,该方法确实属于该类。总体而言,我试图将其用于更复杂的循环,但我想尝试举一个小例子。我希望能够将节点输入到函数中,但 Eclipse 会说“语句对‘节点’没有影响”之类的话,这就是为什么我很好奇你是否可以拥有节点类型的函数?
  • 你可以有一个类型为Node的函数。然而,由于print_values() 只是打印出一个字符串,return_node() 并没有做它应该做的事情。 return_node() 需要返回一个节点,但你没有这样做。对于这个特定的功能/想法,由于 print_values() 属于 Node 类,只要 inNode 已初始化,您就可以在代码中的任何位置调用 inNode.print_values()
  • 如果我想返回字符串和整数,是否必须编写两个单独的函数?我希望能够将 inNode 设置为我声明的任何节点,然后让函数在我输入的节点上执行一些循环。在我的问题中,我以 print_values() 为例,但我认为它的工作原理与我正在尝试做的相同。
  • 如果您没有将它们打印出来并实际尝试获取这些字符串和 int 值,那么是的,您必须创建两个单独的函数。例如:int getNodeVal()String getNodeStr。如果您想让新的Node 具有与先前存在的inNode 相同的属性,则必须使用另一种方法来设置所有新变量或使用指针将这些新的Node 变量设置为您当前的@987654341 @。例如,Node *tmp = inNode.
  • 原来我的问题是我在错误的范围内声明了函数,所以你们几乎不可能解决我的问题。但我会给你最好的答案,因为你是最有帮助的!
【解决方案2】:

类只是一种类型,因此“具有一个类类型的函数”这句话并没有真正的意义。相反,您应该只说“有类型类”。

您应该根据函数作为参数的类型(函数域)和返回的类型(协域)来考虑函数。例如函数int mul2(int x) { return 2 * x; } 具有域int 和codomain int(即int -> int)。

您已声明函数return_node 具有域Node 和codomain Node(即Node -> Node)。那么您的return_node定义(即实现)是否满足此声明?好吧,return_node 只是返回由 print_values 返回的值,它本身具有隐式域 Node 和 codomain voidreturn_nodeprint_values 的共同域相同吗?不,因为Node != void,因此您对return_node 的定义不满足给定的声明。

【讨论】:

    【解决方案3】:

    这很难帮助你,因为你以错误的方式使用了正确的术语。让我们从标题开始:

    “创建一个返回类类型的函数”

    没有。您想编写一个返回类类型值的函数。 进一步...

    “我正在尝试创建一个具有类节点类型并以节点作为参数的函数。”

    没有。我猜你的意思是你在标题中已经说过的:返回一个Node并传递一个Node作为参数(你的函数的类型是Node TYPE_OF_YOUR_FUNCTION (Node),只是为了记录)。

    澄清这一点后,我其实不知道你的问题是什么。如果你有这样的课程:

    struct MyClass {
        int x;
    }
    

    你可以像这样写一个函数:

    MyClass MyMyClassFunction(MyClass a){
        a.x ++;
        return a;
    }
    

    在你的函数中你没有返回任何东西。您将其声明为返回 Node,但实际上返回了 inNode.print_values(); 的值,即 void(因为这是 print_values() 的返回类型)。将其更改为例如

    Node return_node (Node inNode) {
        inNode.print_values();
        return inNode;
    }
    

    【讨论】:

    • 我为我缺乏术语而道歉。我对这一切还是很陌生。您的假设是正确的,但即使在将我的代码更改为您的最后一部分之后也是如此。我仍然被告知“节点”声明无效。
    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多