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

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

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

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

Q&A

解決済

1回答

844閲覧

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

yu_89

総合スコア34

C++

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

0グッド

0クリップ

投稿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

1#ifdef HAVE_CONFIG_H 2#include "config.h" 3#endif 4 5#include <gnuradio/io_signature.h> 6#include "Kurtosis_only_c_impl.h" 7 8namespace gr { 9 namespace Kurtosis_only { 10 11 using input_type = gr_complex; 12 using output_type = gr_complex; 13 14 Kurtosis_only_c::sptr 15 Kurtosis_only_c::make(int large_loop, int small_loop) 16 { 17 return gnuradio::get_initial_sptr 18 (new Kurtosis_only_c_impl(large_loop, small_loop)); 19 } 20 21 22 /* 23 * The private constructor 24 */ 25 Kurtosis_only_c_impl::Kurtosis_only_c_impl(int large_loop, int small_loop) 26 : gr::sync_block("Kurtosis_only_c", 27 gr::io_signature::make(1, 1, sizeof(input_type)), 28 gr::io_signature::make(2, 2, sizeof(output_type))), 29 d_LL(large_loop), d_SL(small_loop) 30 {} 31 32 /* 33 * Our virtual destructor. 34 */ 35 Kurtosis_only_c_impl::~Kurtosis_only_c_impl() 36 { 37 } 38 39 int 40 Kurtosis_only_c_impl::work(int noutput_items, 41 gr_vector_const_void_star &input_items, 42 gr_vector_void_star &output_items) 43 { 44 auto in0 = static_cast<const input_type*>(input_items[0]); 45 auto out0 = static_cast<output_type*>(output_items[0]); 46 47 /*gr_complex pwr, pwi; 48 49 gr_complex S1r[d_SL], S1i[d_SL], S2r[d_SL], S2i[d_SL], S3r[d_SL], S3i[d_SL], 50 S4r[d_SL], S4i[d_SL]; 51 52 gr_complex dcnt[d_SL]; 53 54 gr_complex Myu1r[d_SL], Myu1i[d_SL], Myu2r[d_SL], Myu2i[d_SL], Myu3r[d_SL], 55 Myu3i[d_SL], Myu4r[d_SL], Myu4i[d_SL]; 56 57 Kurtosis_only_c_impl Kr[d_SL], Ki[d_SL];*/ 58 59 for(int k = 0; k < noutput_items; k++) 60 { 61 for(int j = 0; j < d_LL; j++) 62 { 63 for(int i = 0; i < d_SL; i++) 64 { 65 pwr = in0[i].real(); 66 pwi = in0[i].imag(); 67 68 S1r[i] = S1r[i] + pwr; 69 S1i[i] = S1i[i] + pwi; 70 71 S2r[i] = S2r[i] + pwr * pwr; 72 S2i[i] = S2i[i] + pwi * pwi; 73 74 S3r[i] = S3r[i] + pwr * pwr * pwr; 75 S3i[i] = S3i[i] + pwi * pwi * pwi; 76 77 S4r[i] = S4r[i] + pwr * pwr * pwr * pwr; 78 S4i[i] = S4i[i] + pwi * pwi * pwi * pwi; 79 80 dcnt[i] = dcnt[i] + 1; 81 82 } 83 84 for(int i = 0; i < d_SL; i++) 85 { 86 Myu1r[i] = S1r[i] / dcnt[i]; 87 Myu1i[i] = S1i[i] / dcnt[i]; 88 89 Myu2r[i] = S2r[i] / dcnt[i]; 90 Myu2i[i] = S2i[i] / dcnt[i]; 91 92 Myu3r[i] = S3r[i] / dcnt[i]; 93 Myu3i[i] = S3i[i] / dcnt[i]; 94 95 Myu4r[i] = S4r[i] / dcnt[i]; 96 Myu4i[i] = S4i[i] / dcnt[i]; 97 } 98 99 for(int i = 0; i < d_SL; i++) 100 { 101 Kr[i] = (Myu4r[i] - 4 * Myu3r[i] * Myu1r[i] + 6 * Myu2r[i] * Myu1r[i] 102 * Myu1r[i] - 3 * Myu1r[i] * Myu1r[i] * Myu1r[i] * Myu1r[i]) / 103 ((Myu2r[i] - Myu1r[i] * Myu1r[i]) * (Myu2r[i] - Myu1r[i] 104 * Myu1r[i])); 105 106 Ki[i] = (Myu4i[i] - 4 * Myu3i[i] * Myu1i[i] + 6 * Myu2i[i] * Myu1i[i] 107 * Myu1i[i] - 3 * Myu1i[i] * Myu1i[i] * Myu1i[i] * Myu1i[i]) / 108 ((Myu2i[i] - Myu1i[i] * Myu1i[i]) * (Myu2i[i] - Myu1i[i] 109 * Myu1i[i])); 110 } 111 112 for(int i = 0; i < d_SL; i++) 113 { 114 out0[i][0] = Kr[i]; 115 out0[i][1] = Ki[i]; 116 } 117 } 118 } 119 120 return noutput_items; 121 } 122 123 } /* namespace Kurtosis_only */ 124} /* namespace gr */ 125

Kurtosis_only_c_impl.h

1#ifndef INCLUDED_KURTOSIS_ONLY_KURTOSIS_ONLY_C_IMPL_H 2#define INCLUDED_KURTOSIS_ONLY_KURTOSIS_ONLY_C_IMPL_H 3 4#include <Kurtosis_only/Kurtosis_only_c.h> 5 6namespace gr { 7 namespace Kurtosis_only { 8 9 class Kurtosis_only_c_impl : public Kurtosis_only_c 10 { 11 private: 12 gr_complex pwr; 13 gr_complex pwi; 14 gr_complex S1r; 15 gr_complex S1i; 16 gr_complex S2r; 17 gr_complex S2i; 18 gr_complex S3r; 19 gr_complex S3i; 20 gr_complex S4r; 21 gr_complex S4i; 22 gr_complex Myu1r; 23 gr_complex Myu1i; 24 gr_complex Myu2r; 25 gr_complex Myu2i; 26 gr_complex Myu3r; 27 gr_complex Myu3i; 28 gr_complex Myu4r; 29 gr_complex Myu4i; 30 gr_complex Kr; 31 gr_complex Ki; 32 gr_complex dcnt; 33 34 int d_LL; 35 int d_SL; 36 37 public: 38 Kurtosis_only_c_impl(int large_loop, int small_loop); 39 ~Kurtosis_only_c_impl(); 40 41 // Where all the action really happens 42 int work( 43 int noutput_items, 44 gr_vector_const_void_star &input_items, 45 gr_vector_void_star &output_items 46 ); 47 }; 48 49 } // namespace Kurtosis_only 50} // namespace gr 51 52#endif /* INCLUDED_KURTOSIS_ONLY_KURTOSIS_ONLY_C_IMPL_H */ 53

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

S1r はヘッダで

c++

1 private: 2 gr_complex pwr; 3 gr_complex pwi; 4 gr_complex S1r;

こう宣言されていて、配列やstd::vector などではないので [] は使えないということでしょう。

ローカル変数の gr_complex S1r[d_SL] はコメントアウトされています。

投稿2022/05/26 02:59

int32_t

総合スコア20941

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_89

2022/05/26 09:49

ご回答いただき、ありがとうございます。 そういうことですか、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問