ページ 11

qt creator における構造体のコピーについて

Posted: 2016年1月27日(水) 18:12
by pocket
お世話になっております.

今回はQT creatorにおける構造体のコピーについて質問させていただきます.
c++歴は1年と少し,qt歴は半年ほどです.

以下に今回作成したプロジェクトの作成方法を記載します.
なお,qtのバージョンは5です.
環境はVMWare Lubuntuで,qtcreatorはapt-getから入れました.
導入のコマンドは以下です.
sudo apt-get install build-essential
sudo apt-get install qtcreator
sudo apt-get install qt5-doc qtbase5-examples qtbase5-doc-html
参考までにqtcreatorを導入したサイトを載せます.
http://www.ubuntubuzz.com/2015/05/how-t ... -1504.html

「プロジェクト作成」
1.qt creatorを起動
2.新しいプロジェクト
3.qtウィジェットアプリケーションを選択し「選択」を押す
4.名前にstructをいれ「次へ」を押す
5.キットの選択は「デスクトップ」
6.クラス情報も変更せず「次へ」
7.プロジェクト管理も変更せず「完了」

以上で,struct.pro,mainwindow.h,main.cpp,mainwindow.cppといったファイルが自動的に作られます.

ヘッダファイルに以下の行を追加しました.
なお,今回はQString,vectorとQDebugを使用していますので,
そのインクルードも必要です.
mainwindow.hに追加した行

コード:

#include<QString>
#include<QDebug>
#include<vector>
struct Combo{
    QString device_name;
    std::vector<QString> function;
};
また,main.cppのmain関数内に以下のコードを追加しました.
main.cpp

コード:

    int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
  //ここから追加しました
    Combo device1;
    device1.device_name=="ant";
    device1.function.push_back("good bye");
    device1.function.push_back("walk");
    qDebug()<<device1.function[0];

    Combo device2=device1;
    qDebug()<<device2.device_name;
    //ここまで追加した分です
    return a.exec();
}


ビルド(Ctr+b)と実行(Ctr+r)はqtcreator内で行っています.

実行結果は以下です.
"good bye"
""

結果を見ると構造体がコピーできていません.
また,いろいろ試行錯誤しましたが,どうも構造体を関数に渡すこともできないようです.

ですので,質問させていただきたいのは,qtcreatorにおける構造体のコピーの仕方です.
私のプログラムに何か不備がある場合は,その不備を指摘していただきたいです.
また,別の方法でコピーできる場合はその方法を教えていただきたいです.
あわせて,構造体を関数渡しすることができるかの検証もお願いしたいです.
つまり,mainで定義したdevice1を関数内から利用できるかということです.
私の環境では上記の構造体を関数に渡すことができませんでした.

よろしくお願いいたします.

Re: qt creator における構造体のコピーについて

Posted: 2016年1月27日(水) 19:00
by ISLe
main.cppの8行目
代入になっていないですが、写し間違いですか?

Re: qt creator における構造体のコピーについて

Posted: 2016年1月27日(水) 20:40
by pocket
ISLE さん

返信ありがとうございます.

今確認しましたところ,原因はご指摘にとおり,
以下の部分でした.

コード:

device1.device_name=="ant";
単純に文字が代入できていませんでした.
コピーされているのかの確認をdevice_nameのみで行っていたために,
関数に渡したときもコピーされていないと勘違いしました.

まとめますと,qtcreatorで構造体のコピーは=(イコール)でできました.
また,関数に構造体を渡すことも正常にできました.

単純なミスでお手数をおかけしました.
また,この問題に対して考えてくださった皆様に感謝いたします.