// testing1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <vector>
#include <iostream>
#include<conio.h>
using namespace std;
struct Data_point {
double x;
double y;
};
void PlotThis(unsigned int n )
{
Data_point graph[n]; //shows error here
//do something else, dont worry about that
}
int main ()
{
unsigned int nSamples;
cout << "Please enter nSamples: ";
cin >> nSamples;
PlotThis(nSamples);
return 0;
}
这在编译时显示错误:
Error 1 error C2057: expected constant expression testing1.cpp 23
Error 2 error C2466: cannot allocate an array of constant size 0 testing1.cpp 23
Error 3 error C2133: 'graph' : unknown size testing1.cpp 23
第23行是Data_point graph [n]; //在这里显示错误
即使我从main()传递值,它也显示未知大小。它要求编译时的值(图形的大小,即n)。这是否意味着数组大小分配在编译时发生?如何解决这个问题
答案 0 :(得分:3)
C++
不支持在运行时确定大小的数组。您可以切换到使用Vector
类。
std::vector<Data_point > graph;
要遵循您正在使用的逻辑:在PlotThis
中,您可以使用std::vector::resize调整容器大小以包含n
元素。
void PlotThis(unsigned int n){
graph.resize(n); // Resize Vector container
...
还有std::vector
:
"compared to arrays, vectors consume more memory in exchange for
the ability to manage storage and grow dynamically in an efficient way."
这意味着您可以选择不用担心指定vector
的大小,只需添加元素即可。因此,您可以通过循环确定方法中添加了多少元素(n
) - 可以使用std::vector::push_back
。如果您这样做,那么只需确保在某个时候清除vector
,这样您就不会重复使用旧数据 - 可以使用std::vector::clear
。
答案 1 :(得分:0)
你可以使用一些容器,例如vector,deque等......
void PlotThis(unsigned int n)
{
std::vector<Data_point> graph(n);
//do something else, dont worry about that
}
或动态为数组分配内存:
//C++
void PlotThis(unsigned int n)
{
Data_point* graph = new Data_point[n];
//do something else, dont worry about that
//Remember to free memory
delete graph;
}
//C
void plot_this(unsigned int n)
{
Data_point* graph = (Data_point*) malloc(sizeof(Data_point) * n);
//do something else, dont worry about that
//Remember to free memory
free(graph);
}