質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

no match for ‘operator[]’ というエラーが出る

yu_89
yu_89

総合スコア27

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1回答

0評価

0クリップ

133閲覧

投稿2022/05/26 02:49

解決したいこと

gnuradioの自作ブロックをc++で書いているのですが、" no match for ‘operator[]’ "というエラーが出てしまいます。
配列を宣言したり等、色々試したのですが解決しません。
何が原因なのでしょうか。
わかる方、いらっしゃいましたら教えていただきたいです。よろしくお願いします。

発生している問題・エラーメッセージ

/home/nomo/gr-Kurtosis_only/lib/Kurtosis_only_c_impl.cc:88:16: error: no match for ‘operator[]’ (operand types are ‘gr_complex’ {aka ‘std::complex<float>’} and ‘int’) 88 | S1r[i] = S1r[i] + pwr; | ^

該当のc++のソースコード

Kurtosis_only_c_impl.cc

#ifdef HAVE_CONFIG_H #include "config.h" #endif #include <gnuradio/io_signature.h> #include "Kurtosis_only_c_impl.h" namespace gr { namespace Kurtosis_only { using input_type = gr_complex; using output_type = gr_complex; Kurtosis_only_c::sptr Kurtosis_only_c::make(int large_loop, int small_loop) { return gnuradio::get_initial_sptr (new Kurtosis_only_c_impl(large_loop, small_loop)); } /* * The private constructor */ Kurtosis_only_c_impl::Kurtosis_only_c_impl(int large_loop, int small_loop) : gr::sync_block("Kurtosis_only_c", gr::io_signature::make(1, 1, sizeof(input_type)), gr::io_signature::make(2, 2, sizeof(output_type))), d_LL(large_loop), d_SL(small_loop) {} /* * Our virtual destructor. */ Kurtosis_only_c_impl::~Kurtosis_only_c_impl() { } int Kurtosis_only_c_impl::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { auto in0 = static_cast<const input_type*>(input_items[0]); auto out0 = static_cast<output_type*>(output_items[0]); /*gr_complex pwr, pwi; gr_complex S1r[d_SL], S1i[d_SL], S2r[d_SL], S2i[d_SL], S3r[d_SL], S3i[d_SL], S4r[d_SL], S4i[d_SL]; gr_complex dcnt[d_SL]; gr_complex Myu1r[d_SL], Myu1i[d_SL], Myu2r[d_SL], Myu2i[d_SL], Myu3r[d_SL], Myu3i[d_SL], Myu4r[d_SL], Myu4i[d_SL]; Kurtosis_only_c_impl Kr[d_SL], Ki[d_SL];*/ for(int k = 0; k < noutput_items; k++) { for(int j = 0; j < d_LL; j++) { for(int i = 0; i < d_SL; i++) { pwr = in0[i].real(); pwi = in0[i].imag(); S1r[i] = S1r[i] + pwr; S1i[i] = S1i[i] + pwi; S2r[i] = S2r[i] + pwr * pwr; S2i[i] = S2i[i] + pwi * pwi; S3r[i] = S3r[i] + pwr * pwr * pwr; S3i[i] = S3i[i] + pwi * pwi * pwi; S4r[i] = S4r[i] + pwr * pwr * pwr * pwr; S4i[i] = S4i[i] + pwi * pwi * pwi * pwi; dcnt[i] = dcnt[i] + 1; } for(int i = 0; i < d_SL; i++) { Myu1r[i] = S1r[i] / dcnt[i]; Myu1i[i] = S1i[i] / dcnt[i]; Myu2r[i] = S2r[i] / dcnt[i]; Myu2i[i] = S2i[i] / dcnt[i]; Myu3r[i] = S3r[i] / dcnt[i]; Myu3i[i] = S3i[i] / dcnt[i]; Myu4r[i] = S4r[i] / dcnt[i]; Myu4i[i] = S4i[i] / dcnt[i]; } for(int i = 0; i < d_SL; i++) { Kr[i] = (Myu4r[i] - 4 * Myu3r[i] * Myu1r[i] + 6 * Myu2r[i] * Myu1r[i] * Myu1r[i] - 3 * Myu1r[i] * Myu1r[i] * Myu1r[i] * Myu1r[i]) / ((Myu2r[i] - Myu1r[i] * Myu1r[i]) * (Myu2r[i] - Myu1r[i] * Myu1r[i])); Ki[i] = (Myu4i[i] - 4 * Myu3i[i] * Myu1i[i] + 6 * Myu2i[i] * Myu1i[i] * Myu1i[i] - 3 * Myu1i[i] * Myu1i[i] * Myu1i[i] * Myu1i[i]) / ((Myu2i[i] - Myu1i[i] * Myu1i[i]) * (Myu2i[i] - Myu1i[i] * Myu1i[i])); } for(int i = 0; i < d_SL; i++) { out0[i][0] = Kr[i]; out0[i][1] = Ki[i]; } } } return noutput_items; } } /* namespace Kurtosis_only */ } /* namespace gr */

Kurtosis_only_c_impl.h

#ifndef INCLUDED_KURTOSIS_ONLY_KURTOSIS_ONLY_C_IMPL_H #define INCLUDED_KURTOSIS_ONLY_KURTOSIS_ONLY_C_IMPL_H #include <Kurtosis_only/Kurtosis_only_c.h> namespace gr { namespace Kurtosis_only { class Kurtosis_only_c_impl : public Kurtosis_only_c { private: gr_complex pwr; gr_complex pwi; gr_complex S1r; gr_complex S1i; gr_complex S2r; gr_complex S2i; gr_complex S3r; gr_complex S3i; gr_complex S4r; gr_complex S4i; gr_complex Myu1r; gr_complex Myu1i; gr_complex Myu2r; gr_complex Myu2i; gr_complex Myu3r; gr_complex Myu3i; gr_complex Myu4r; gr_complex Myu4i; gr_complex Kr; gr_complex Ki; gr_complex dcnt; int d_LL; int d_SL; public: Kurtosis_only_c_impl(int large_loop, int small_loop); ~Kurtosis_only_c_impl(); // Where all the action really happens int work( int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items ); }; } // namespace Kurtosis_only } // namespace gr #endif /* INCLUDED_KURTOSIS_ONLY_KURTOSIS_ONLY_C_IMPL_H */

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。