基本上,我试图制作一个数组,该数组每次用户输入值时都会变大。这意味着我永远不知道数组会持续多久。我不知道这是否与我的课程有关。
#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
答案 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)
答案 2 :(得分:0)
您可以使用std :: vector。如果空间不足,它将分配元素并将其复制到新位置。
如果您出于教育原因要自己上课,这是您应尝试的基本解决方案:
您预先分配了一些内存,并将其长度存储为容量。您需要一个变量(大小)来存储已经输入到类中的元素数量,例如通过push_back函数。一旦大小达到容量,您需要在所有元素上重新分配内存副本,然后删除旧内存。