1. 程式人生 > >錯誤 invalid use of non-static data member 'main form zhiliu

錯誤 invalid use of non-static data member 'main form zhiliu

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

google翻譯:使用無效的非靜態資料成員的main_form:: zhiliu_datainfo;難不成只能使用靜態的資料?

靜態就靜態了,這個又不是不可以改的,(以前把靜態變數和常量進行了混淆,現在明白了,這就不是個問題了)

果斷加上static:

Q_INVOKABLE static u_char zhiliu_datainfo[30]; //直流

再編譯一下:

錯誤:undefined reference to `main_form::zhiliu_datainfo'

出錯 了,google一下:未定義的參考`main_form:: zhiliu_datainfo“

哦,它說的沒有定義,呵,我在CPP中定義一下,再看,不過初值定為多少呢?就全為零吧!


這樣定義:u_char main_form::zhiliu_datainfo[30]={0x00};

file:///root/桌面/kangear/qt/serialport/1.5-3.6(Qt+Qml)/MyItem2.qml:4: ReferenceError: Can't find variable: zhiliu_datainfo

這下編譯是通過了,不過Qml又找不到了這個值,我看看我前幾天的文章再:《QML呼叫Qt_CPP中的變數http://blog.csdn.net/kangear/article/details/8042187


哈哈 終於找到原因了我名字起成“zhiliu”,而我在Qml卻寫成了zhiliu_datainfo,怪不呢!!!

import QtQuick 1.0Rectangle{    Text{        text:zhiliu_datainfo    }}

這下沒有錯誤了,不過卻不見Qml露面……UI都沒有出現是因為我沒有插串列埠的事嗎?

插上再看!

2012年10月9日20:46:30:還是不行,CPP的程式已經執行,再看看main.cpp中的:

#include <QtGui/QApplication>#include "main_form.h"#include <QDeclarativeView>#include <QDeclarativeContext>int main(int argc, char *argv[]){    QApplication a(argc, argv);    QDeclarativeView view;    main_form w;//    view.rootContext()->setContextProperty("applicationData", &w);    view.rootContext()->setContextProperty("zhiliu",*main_form::zhiliu_datainfo);//    view.rootContext()->setContextProperty("jiaoliu",*main_form::jiaoliu_datainfo);//    view.rootContext()->setContextProperty("dianchi",*main_form::dianchi_datainfo);//    view.rootContext()->setContextProperty("jueyuan",*main_form::jueyuan_datainfo);//    view.rootContext()->setContextProperty("kuixian",*main_form::kuixian_datainfo);//    view.rootContext()->setContextProperty("nibian",*main_form::nibian_datainfo);//    view.rootContext()->setContextProperty("DCtoDC",*main_form::DCtoDC_datainfo);    view.setSource(QUrl::fromLocalFile("../MyItem2.qml"));    view.show();//    w.show();    return a.exec();}

再看看標準的Qml和CPP混合程式設計main.cpp:

#include <QApplication>#include <QDeclarativeView>#include <QDeclarativeContext>#include "applicationdata.h"int main(int argc, char *argv[]){    QApplication app(argc, argv);    QDeclarativeView view;    ApplicationData data;    view.rootContext()->setContextProperty("applicationData", &data);    view.setSource(QUrl::fromLocalFile("../myDeclarativeContext100/MyItem.qml"));    view.show();    return app.exec();}

改成一樣的看看.............

2012年10月9日20:55:05:不行,仍然沒有,這程式絕對在戲弄我!!!

2012年10月9日21:01:30:換成全英文目錄:結果:不行!

2012年10月9日21:05:28:淚奔!!我QML沒設定大小,估計是有了,不過我看不到而已!!!

改為:

import QtQuick 1.0Rectangle{    width: 300    height: 300    Text{        text:zhiliu    }}

下邊是執行效果圖:


數也正確!OYE!!!!!

不急,殺個回馬槍把上邊假設的驗證一下:

①:中文目錄:結論:在LInux下中文目錄並不會導致Qt程式執行失敗!

②:沒了……呵呵  今天收穫不少!

========================================================================================================================

把微控制器接上再來欣賞一下 全流程 的:


糟糕!!!!,明明已經接到資料,QML裡邊為什麼還是“0”,莫非它只是,上電時獲取一次!加上timer試試……

2012年10月9日21:23:12:QML改為

import QtQuick 1.0Rectangle{    width: 300    height: 300    Text{        id:text        text:zhiliu    }    Timer{        interval:500;        running: tue;        repeat:true        onTriggered: text.text = zhiliu    }}

結果還是不行!!在cpp中除錯一下,看值是不是沒有變……

2012年10月9日21:27:13:加上如下除錯資訊:

qDebug("%u",zhiliu_datainfo[0]);
不過執行結果是這樣的:

陣列中的值是變了,可是QML中還是0,好痛苦!!!

import QtQuick 1.0Item {    Timer {        interval: 500; running: true; repeat: true        onTriggered: time.text = Qt.formatDateTime(new Date(), "dddd\nyyyy-MM-dd\n-MMM-\nhh-mm-ss")                                                              // 星期 年份 月份 號 大月份    }    Text { id: time }}

上邊這麼簡單的程式都能動態顯示時間,我的為什麼不能動態顯示資料呢???

==============================================================================================================

2012年10月9日21:35:44:

靜下心來好好想想,暫且不想為什麼不行了,還是想想如何得到資料為首要任務!對比了上邊的動態顯示時間的程式,這個是個函式,而我的是這陣列,我按照這各種形式改為函式試試:參考《QML呼叫Qt_CPP中的變數http://blog.csdn.net/kangear/article/details/8042187

2012年10月9日21:56:05:

不死心,先看看QML中定時器是否正常執行,把上邊顯示時間的程式拷進去看看:


時間正常動態顯示,說明timer沒有問題……

估計我得死心了,我得改為函式返回的方式了……

2012年10月9日22:33:21:

寫這樣一個回撥小函式:

unsigned char main_form::displayData(){    return zhiliu_datainfo[0];}


可以動態了,明天再完善一下……

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述