私が達成しようとしているのは、関数から2次元配列へのポインタをmain()でアクセスできるように戻すことです。私は、std::vector
のようなあなたのためにそれを行ういくつかのC + +ライブラリがあることを知っているが、私はちょうど通常のポインタと配列に固執するように私は組み込みボード(STM32)で作業しているので、動的メモリ割り当てを避けようとしています。 (も私も、なぜ私はポインタ/配列で動作するように強制していますですKEIL uVisionでstd::array
を使用することはできません何らかの理由で)また関数から2D配列へのポインタを返す - C++
、私はローカル配列int arr[2][2]
へのポインタを返すことは定義されていることを理解します私はtest_array
を作成し、それをクラスの中で宣言し、それを関数(グローバル変数として動作する)で定義するので、関数が返った後はもはや有効ではないので、関数内の良い考えはありません問題ではない。皆さんはどう思いますか?しかし、このようにそれを行うとエラーに"スカラー初期化子で過剰の要素"
#include <iostream>
#include "file.hpp"
int main() {
myClass class_object;
class_object.value = class_object.foo();
}
//file.hpp
#include <stdio.h>
class myClass{
int array[2][2];
int (*foo())[2];
int (*value)[2];
int test_array[2][2]; //declaring here!
};
//file.cpp
#include "file.hpp"
int (*myClass::foo())[2]{
test_array[2][2]={ {10,20}, {30, 40} }; //defining here - ERROR!!
int arr[2][2]= {
{1, 10},
{20, 30}
};
return arr;
}
'int(* myClass :: foo())[2] {'これは私がまだ追いついていない関数宣言のいくつかの新しい方法ですか?うんざりのように見える!また、あなたがしていないことを知っていたと言っている地元はまだ戻っています。最後に、エラーの発生場所を教えてください。 – John3136
なぜ人々はC配列に執着しているのですか? : –
@Baum無能な教授たちが教えているので、これらは重要です_産業はこれらの人々を取り除くだけで、配列の名前ではありません。配列を割り当てることはできません。 'std :: array、2>'を使った場合は、問題が少なくなるかもしれません。 –