我正在尝试在c ++中设置和使用数组。数组已声明并已使用,但是即使在程序中使用了数组,我仍会返回错误“变量集但未使用”。
它适用于Linux,但不适用于Windows 10。
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int sampling_rate = 44100;
double dt = 1.0 / sampling_rate;
int duration = 1;
int number_of_samples = duration / dt;
int sample_array[number_of_samples];
int amplitude = 5000;
cout << "sampeling rate = " << sampling_rate<<endl;
for (int sample_number = 0; sample_number < sampling_rate; sample_number++)
{
double sample_time = sample_number * dt;
sample_array[sample_number] = amplitude * sin(2 * M_PI * 293 * sample_time);
}
}
我希望这段代码可以构成一个数组,然后可以将其转换为正弦波。
答案 0 :(得分:2)
您的编译器警告指出(正确),您只写入到数组,却从未读取结果。
由于您没有阅读结果,为什么要首先计算它们?您的编译器注意到这是无用的工作是完全正确的,并且假定您可能实际上忘记了使用使用计算的值。
由于这只是警告,而不是错误,如果此代码正在进行中,则可以暂时将其忽略。 。但是,在“完成的”代码中,您应该对这种警告感到非常震惊,因为它几乎肯定会指向您的代码中的错误。
答案 1 :(得分:1)
@KonradRudolph's answer讨论了警告的来源。您缺少的代码实际上是对数组做点事的后半部分。除此之外,代码中还有一些严重的缺陷(这就是为什么它在Windows上不起作用的原因):
您要尝试的是创建可变长度数组和they are not part of the standard。 number_of_samples
在运行时求值,[]
数组需要具有已知的编译时大小。
对于动态数组,您可以使用std::vector
,但实际上不需要一个,因为所有初始变量的行为都像常量。您只需要声明它们constexpr
,以便在编译时对其进行评估:
constexpr int sampling_rate = 44100;
constexpr double dt = 1.0 / sampling_rate;
constexpr int duration = 1;
constexpr int number_of_samples = duration / dt;
int sample_array[number_of_samples];
您还尝试使用M_PI
中的<math.h>
,但您忘记了#define _USE_MATH_DEFINES
:
#define _USE_MATH_DEFINES
#include <math.h>
(您也不应该use namespace std;
读到here原因)