« 多言語対応の途中ですが… | トップページ | PCMデータの同期をどうするかを考える前に »

2014年5月24日 (土)

この回答はつらいかも…

ぜんぜん関係ないのですが、調べ物をしていて思ったことです。

ビルド時のエラーを見て、検索した結果Debianのbug tracking systemが引っかかりました。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=343746

ビルド時に以下のようなエラーが出ました。少しピンとこないので、同じエラーになっている人がいないか調べてみたのです。

settings.cpp: In member function 'void brynhildr::Settings::readSettings()':
settings.cpp:77:34: error: conversion from 'long int' to 'const QVariant' is ambiguous
QTB_DEFAULT_VIDEOQUALITY).toInt());
^
settings.cpp:77:34: note: candidates are:
In file included from C:/Tools/develop/Qt/Qt5.3.0/5.3/mingw482_32/include/QtCore/qvariantanimation.h:48:0,
from C:/Tools/develop/Qt/Qt5.3.0/5.3/mingw482_32/include/QtCore/qpropertyanimation.h:45,
  :
  :

実は、この最後の行以降に重要なヒントが書かれているのですが、質問者はそれに気づいていないようです。Debianのbug tacking systemに書くくらいの開発者なら、気づいてもよいのでは?という判断でしょうか…

回答者の答えは、「Subjectを見ろ」の一言です( ^ω^ )(あなたがもう答えを書いているというユーモアかも)

私の場合で答えるとすれば、QSettingsクラスのvalueという関数を使っていたのですが、
この関数の定義はQt Assistantによれば、以下のようになっています。

QVariant QSettings::value(const QString & key, const QVariant & defaultValue = QVariant()) const

エラーはlong int から QVariantへの変換が曖昧です、というメッセージです。

具体的には以下のように書いていました。

// load videoQualilty
setVideoQuality(settings.value(QTB_VIDEOQUALITY, QTB_DEFAULT_VIDEOQUALITY).toInt());

第二引数がマクロQTB_DEFAULT_VIDEOQUALITY(5)という定数値だったのですが、これをvalue()に適用するなら、第二引数はQVariantでなければならないので変換しなければならないけど、候補がたくさんあって分からないよ、ってことのようです。

今回は以下のように明示してあげました。

// load videoQualilty
setVideoQuality(settings.value(QTB_VIDEOQUALITY, (qint32)QTB_DEFAULT_VIDEOQUALITY).toInt());

このようにかけば、5という値はqint32なので、これをQVariantに変換すればいいのですね、とコンパイラが判断してくれて、エラーが解決するということのようです。

確かにSubjectに

settings.cpp:77:34: error: conversion from 'long int' to 'const QVariant' is ambiguous

って書いてあれば、「答えはそこにあなたが書いてあるでしょ」と、言いたくなるのも分からなくはないですが、少しさみしいですよね…

« 多言語対応の途中ですが… | トップページ | PCMデータの同期をどうするかを考える前に »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: この回答はつらいかも…:

« 多言語対応の途中ですが… | トップページ | PCMデータの同期をどうするかを考える前に »