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

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

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

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

Q&A

解決済

1回答

1162閲覧

C++のテンプレート型引数を関数に使おうとすると型が違うとエラーが出る

yu031196

総合スコア2

C++

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

0グッド

0クリップ

投稿2020/11/28 16:30

前提・実現したいこと

C++でリアルタイムにグラフ描画がしたかったため下のmatplotlibcppというものを導入しようとしています。
https://github.com/lava/matplotlib-cpp

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

ヘッダファイルを加えてコンパイルしようとすると、

include/matplotlibcpp.h:2380:38: error: no matching function for call to ‘begin(const double&)’ auto xs = distance(std::begin(x), std::end(x)); ^ note: candidate: template<class _Tp> constexpr const _Tp* std::begin(std::initializer_list<_Tp>) begin(initializer_list<_Tp> __ils) noexcept ^

というエラーが出ました。エラーメッセージが多いので省略しましたが、end(x)でも同様のエラーがでています。
xというのはテンプレート型引数なのですが、これがdouble型だと思われたことによってエラーが出ていると推測しています。
上記のx, yがstd::beginとstd::endで使えるようにするためにはどのようにすればよいでしょうか。
よろしくお願いいたします。

該当のソースコード

関係があると思われる部分を以下に示します。

C++

1template<> 2struct plot_impl<std::false_type> 3{ 4 template<typename IterableX, typename IterableY> 5 bool operator()(const IterableX& x, const IterableY& y, const std::string& format) 6 { 7 detail::_interpreter::get(); 8 9 // 2-phase lookup for distance, begin, end 10 using std::distance; 11 using std::begin; 12 using std::end; 13 14 auto xs = distance(std::begin(x), std::end(x)); 15 auto ys = distance(std::begin(y), std::end(y)); 16 assert(xs == ys && "x and y data must have the same number of elements!");

補足情報(FW/ツールのバージョンなど)

g++でC++17でコンパイルしています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

このコードだけでは実際にIterableXに渡ってくる型が何なのかが分かりません。実際にdoubleが入ってくればもちろんそのようなエラーが出るのではないでしょうか。例えばstd::vector<std::vector<double>>のようなものを想定している場所でstd::vector<double>になっていた、など、テンプレート呼び出し側の型が合っていない可能性がある気がします。

投稿2020/11/28 16:42

kazatsuyu

総合スコア158

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

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

yu031196

2020/11/28 17:13

回答有り難うございます。 私はヘッダファイル内で問題が発生しているのだと思っていたのですが、仰るとおり、テンプレートの呼び出し側で型が間違っていました。 助かりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問