“可变数组集但未使用”

时间:2019-04-08 09:14:22

标签: c++

我正在尝试在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);
    }
}

我希望这段代码可以构成一个数组,然后可以将其转换为正弦波。

2 个答案:

答案 0 :(得分:2)

您的编译器警告指出(正确),您只写入到数组,却从未读取结果。

由于您没有阅读结果,为什么要首先计算它们?您的编译器注意到这是无用的工作是完全正确的,并且假定您可能实际上忘记了使用使用计算的值。

由于这只是警告,而不是错误,如果此代码正在进行中,则可以暂时将其忽略。 。但是,在“完成的”代码中,您应该对这种警告感到非常震惊,因为它几乎肯定会指向您的代码中的错误。

答案 1 :(得分:1)

@KonradRudolph's answer讨论了警告的来源。您缺少的代码实际上是对数组做点事的后半部分。除此之外,代码中还有一些严重的缺陷(这就是为什么它在Windows上不起作用的原因):

您要尝试的是创建可变长度数组和they are not part of the standardnumber_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原因)