无法制作长度未指定的数组

时间:2019-10-22 19:27:49

标签: c++ arrays

基本上,我试图制作一个数组,该数组每次用户输入值时都会变大。这意味着我永远不知道数组会持续多久。我不知道这是否与我的课程有关。

#pragma once
#include <iostream>
#include <string>
#define dexport __declspec(dllexport)
//Im making an DLL
using namespace std;
class dexport API {
private:
    string users[] = {"CatMan","ManCat"}; //Line With Error Incomplete Type Is Not Allowed
public:
    string getAllUsers(string list[]) {
        for (unsigned int a = 0; a < sizeof(list) / sizeof(list[0]); a = a + 1) {
            return list[a];
        }
    }
};

它给我一个错误不允许输入不完整的类型。我真的不知道该怎么办。 Compiler Error

3 个答案:

答案 0 :(得分:2)

您的代码有些错误。对于初学者来说,数组的大小是固定的,因此,即使您的代码可以编译,它也不起作用。通常,编译器会根据初始化程序的长度来推断数组的大小。但是您正在创建一个类,它需要知道它,因此会出错。

这将解决您的编译问题:

string users[2] = {"CatMan","ManCat"};

但是您的数组具有固定大小,这不是您想要的大小,因此您需要一个std::vector

#include <vector>

[...]

vector<string>users = {"CatMan","ManCat"};

现在,您可以使用'[]'运算符访问字符串,并使用users.push_back添加新用户。

您需要解决的下一个问题是尝试返回值的方式:您不应该将参数用作输出值(尽管可以使用引用或指针)。您应该决定是否要返回对向量的引用,向量的副本或const引用,例如:

// Returning a copy
vector<string> getAllUsers() {
    return users;
}

// Returning a reference
vector<string>& getAllUsers() {
    return users;
}

最后,您正在创建一个库:您应该知道,如果要在不同进程之间共享内存,则需要使用某种共享内存。当前,每个程序都会保留自己的API副本。

答案 1 :(得分:0)

您要寻找的是std::vector

您可以找到更多信息here.

除了允许可变长度之外,它与数组有些相似。

答案 2 :(得分:0)

您可以使用std :: vector。如果空间不足,它将分配元素并将其复制到新位置。

如果您出于教育原因要自己上课,这是您应尝试的基本解决方案:

您预先分配了一些内存,并将其长度存储为容量。您需要一个变量(大小)来存储已经输入到类中的元素数量,例如通过push_back函数。一旦大小达到容量,您需要在所有元素上重新分配内存副本,然后删除旧内存。