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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
pocket
記事: 49
登録日時: 9年前

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

#1

投稿記事 by pocket » 9年前

お世話になっております.

今回は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を関数内から利用できるかということです.
私の環境では上記の構造体を関数に渡すことができませんでした.

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

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

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

#2

投稿記事 by ISLe » 9年前

main.cppの8行目
代入になっていないですが、写し間違いですか?

pocket
記事: 49
登録日時: 9年前

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

#3

投稿記事 by pocket » 9年前

ISLE さん

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

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

コード:

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

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る