Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将静态二维数组的行分配给另一个';s行_C++_Multidimensional Array_Notation - Fatal编程技术网

C++ 将静态二维数组的行分配给另一个';s行

C++ 将静态二维数组的行分配给另一个';s行,c++,multidimensional-array,notation,C++,Multidimensional Array,Notation,以下是我目前掌握的情况: typedef const float Chord[6]; static Chord progressionOne[] = { {5.0f / 6.0f, 1.0, 1.25, 5.0f / 3.0f, 2.0, 2.5}, // i {5.0f / 6.0f, 2.0f / 3.0f, 1.0, 4.0f / 3.0f, 5.0f / 3.0f, 2.0}, // VI {0.75, 1

以下是我目前掌握的情况:

    typedef const float Chord[6];

    static Chord progressionOne[] = {
        {5.0f / 6.0f, 1.0, 1.25, 5.0f / 3.0f, 2.0, 2.5},         // i
        {5.0f / 6.0f, 2.0f / 3.0f, 1.0, 4.0f / 3.0f, 5.0f / 3.0f, 2.0}, // VI
        {0.75, 1.0, 1.25, 1.5, 2.0, 2.5},                       // III
        {1.125, 1.5, 1.875, 2.25, 3.0, 3.75}                      // VII
    };

    static Chord progressionTwo[] = {
        progressionOne + 1, //VI
        progressionOne + 3, //VII
        progressionOne + 0, // i
        progressionOne + 0,
    };
这似乎是我在几轮按摩我的符号、交换星号和调整typedef中能得到的最接近的结果。我想要的是重新排列
progressionTwo
的行,产生
progressionTwo
,这在上下文中是很清楚的。我不介意数据重复或毛茸茸的表示法——我只想避免两次输入实际值


…我真的需要开始阅读标准:/

如果您真的希望这些是简单的数组,您可以简单地为和弦创建
#定义
宏(预处理器定义),并使进程引用这些和弦:

typedef const float Chord[6];

#define CHORD_I { 5.0f / 6.0f, 1.0, 1.25, 5.0f / 3.0f, 2.0, 2.5 }
#define CHORD_VI { 5.0f / 6.0f, 2.0f / 3.0f, 1.0, 4.0f / 3.0f, 5.0f / 3.0f, 2.0 }
#define CHORD_III { 0.75, 1.0, 1.25, 1.5, 2.0, 2.5 }
#define CHORD_VII { 1.125, 1.5, 1.875, 2.25, 3.0, 3.75 }

const Chord progressionOne[] = {
    CHORD_I,
    CHORD_VI,
    CHORD_III,
    CHORD_VII,
};

const Chord progressionTwo[] = {
    CHORD_VI,
    CHORD_VII,
    CHORD_I,
    CHORD_I,
};
不过,预处理器的定义很混乱


如果将
Chord
转换为一个完整的类,则可以以相同的方式将它们定义为局部变量或静态变量,但具有更高的类型安全性和灵活性。然后,在定义
progressionTwo
时,您可以引用
progressionOne
(至少您可以使用局部变量。使用全局变量,您可能会遇到一个)

+1,领先15秒。一句话,你可以
#undef
这些宏在使用后更安全。这并不是我所期望的,但实际上效果很好,尽管有邪恶的宏;)关于咬紧牙关写一个类,你可能也是对的。