我程序的输出是一个数组,该数组的大小基于用户输入。 但是要设置数组的大小,我需要常量。
因此,一个解决方案是让用户在编译/运行之前设置常量。
const int test1 = 10;
const int test2 = 20;
std::string TestArray[test1][test2];
然而,除了数组的2个常量之外,还有几个常量需要设置,所以理想情况下用户只需要设置1个变量,然后根据使用这样的开关设置常量:
const int number = 2;
int test1a;
int test2a;
switch (number)
{
case 1:
test1a = 10;
test2a = 10;
test3a = 123;
break;
case 2:
test1a = 20;
test2a = 20;
test3a = 456;
break;
}
const int test1 = test1a;
const int test2 = test2a;
std::string TestArray[test1][test2];
test2 = 50;
然而,这给了test1和test 2的错误,"表达式必须具有一个常数值"设置数组时。但是在尝试设置test2 = 50之后的行给出了错误"表达式必须是可修改的Ivalue"
正在设置的数据是建筑信息。 因此,第1组将用于具有x层,y人等的普通办公楼 第2组普通酒店 第3组平均住宅区 等
答案 0 :(得分:2)
您无法在功能之外使用切换,无论如何您使用的解决方案都是错误的。您的问题的解决方案是创建一个动态数组,尝试使用Google搜索并询问您之后是否有任何问题。
编辑:
#define number 2
#if number == 2
const int test2 = 10
#else
const int test2 = 20
#endif
答案 1 :(得分:2)
您可以使用模板,例如:
template <std::size_t> struct config;
template <> struct config<1>
{
static constexpr int test1a = 10;
static constexpr int test2a = 10;
static constexpr int test3a = 123;
};
template <> struct config<2>
{
static constexpr int test1a = 20;
static constexpr int test2a = 20;
static constexpr int test3a = 456;
};
constexpr std::size_t number = 2;
const int test1 = config<number>::test1a;
const int test2 = config<number>::test2a;
答案 2 :(得分:1)
因此,一个解决方案是让用户在它们之前设置常量 编译/运行。
必须在编译时知道数组大小。但是,您可以使用编译时开关(使用 class-templates ):
完整示例:
#include <string>
template<int>
struct Switch{};
template<>
struct Switch<1>{
static constexpr int test1a = 10;
static constexpr int test2a = 10;
static constexpr int test3a = 123;
};
template<>
struct Switch<2>{
static constexpr int test1a = 20;
static constexpr int test2a = 20;
static constexpr int test3a = 456;
};
int main(){
constexpr int number = 2; //Change to 1 if you require the other.
constexpr int test1 = Switch<number>::test1a;
constexpr int test2 = Switch<number>::test1a;
std::string TestArray[test1][test2];
}
答案 3 :(得分:1)
尝试使用指向对象数组或指针数组的指针,而不是使用固定大小的对象数组,然后根据用户的输入分配内存。
int number={0};
cin >> number;
int* array{new int{number}};
但是你的代码问题在于它更多采用C风格的编程。这可以使用std :: vector或使用类更容易地完成。