繁体   English   中英

如何编写一个返回到头内数组的函数?

[英]How can I write a function that returns to array inside the header?

我正在尝试创建一个在头文件和 .cpp 文件中的 main.cpp 中返回的函数,并在主函数中运行它。

我所做的这个过程适用于主要。

#include <iostream>
#include <sstream>
#include "Cards.h"

using namespace std;

//this function returns array
int *function1(){
    int a=12;
    int b=13;
    int c=14;
    static int list[3]={a,b,c};
    return list;
}

int main(int argc, const char * argv[]) {
    
    int *list;
    list=function1();
    cout<<list[1]<<endl;
    return 0;
}

但是,我不能在标题和单独的 cpp 文件中执行这些操作。

我有一个卡片标题

#ifndef Cards_H
#define Cards_H
#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

class Cards{
public:
    char suit; //A,H,D,C,S. A is empty card
    int number; //00-13
    int visibilty;//0 - 1. O invisible 1 is visible
    int * function2();
};
#endif

这是类cpp文件

#include "Cards.h"

using namespace std;
//function
int Cards:: function2(){
    int a=12;
    int b=13;
    int c=14;
    int list[3]={a,b,c};
    return list; // error code Cannot initialize return object of type 'int Cards::*' with an lvalue of type 'int [3]'
}

如何解决此问题并在 main 中运行它?

正如评论中指出的那样,已经有一个 SO 线程

在函数中返回数组

处理您的问题。

如果您真的想使用C数组,那么您的程序应如下所示:

Cards_CStyle.h:

    #ifndef Cards_CStyle_H
    #define Cards_CStyle_H

    using namespace std;
    
    class Cards {
    public:
        int* function2(int arr[]);
    };
    #endif

Cards_CStyle.cpp:

    #include "Cards_CStyle.h"

    using namespace std;
    //function
    int* Cards::function2(int arr[]){
        int a=12, b=13, c=14;
        arr[0] = a;
        arr[1] = b;
        arr[2] = c;
        return arr;
    }

main_CStyle.cpp:

    #include <iostream>
    #include "Cards_CStyle.h"
    
    using namespace std;
    
    int main(int argc, const char * argv[]) {
        
        int arr[3]; // Take care that all your functions use size <= 3
        Cards cards;
        int* list=cards.function2(arr);
        cout<<list[1]<<endl;
        return 0;
    }

正如评论中所建议的,您应该使用 STL 的容器,例如固定长度的array或可变长度的vector 假设固定长度为 3 对您来说没问题,那么您的代码将如下所示:

Cards_STLStyle.h:

    #ifndef Cards_STLStyle_H
    #define Cards_STLStyle_H
    #include<array>

    using namespace std;
    typedef array<int, 3> my_array;

    class Cards {
    public:
        my_array function2();
    };
    #endif

Cards_STLStyle.cpp:

    #include "Cards_STLStyle.h"

    using namespace std;
    //function
    my_array Cards::function2(){
        int a=12, b=13, c=14;
        return my_array { a,b,c};
    }

main_STLStyle.cpp:

    #include <iostream>
    #include <array>
    #include "Cards_STLStyle.h"
    
    using namespace std;
    
    int main(int argc, const char * argv[]) {

        Cards cards;
        my_array list=cards.function2();
        cout<<list[1]<<endl;
        return 0;
    }

请在此处找到更多信息:

大批

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM