Agstu.se Buggfix Plus
Aktuellt datum och tid: 22.49 2018-02-24

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 4 inlägg ] 
Författare Meddelande
 Inläggsrubrik: C++ Lost in classes
InläggPostat: 15.12 2018-02-09 
Användarvisningsbild

Blev medlem: 21.24 2011-12-10
Inlägg: 243
Ort: Nynäs
Håller på och slåss med ett prog som jag försöker modifera till det jag vill ha. Programmet har bla funktionen att omvandla olika typsnitt till sina rastervarianter. Bra om man skall skriva ut tecken på en LED-matris. Just nu är jag ganska lost och får spännande fel vid "make" som:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
"error: invalid use of incomplete type ‘class Ui::SSD1306',
  ui(new Ui::SSD1306),"
när jag försöker lägga till en egen Widget.

Utdrag ur koden:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
namespace Ui {
class SSD1306;
}

class SSD1306 : public QWidget
{
    Q_OBJECT
    friend class SSD1306_Worker;

public:
    explicit SSD1306(QWidget *parent = 0);
    ~SSD1306();
.
.
Ui::SSD1306 *ui;
.
.
ssd1306.h
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
#include "ssd1306.h"
#include "ssd1306_worker.h"
#include "ui_ssd1306.h"

SSD1306::SSD1306(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SSD1306),
    _work(NULL)
{
    ui->setupUi(this);
.
.
ssd1306.cpp

Kan jag ha olika klassnamn för det som är relaterat till Ui (det som berör Qwidget mm) och resten av prog? Detta under förutsättning att jag använder samma namn i ssd1306.ui och därmed i ui_ssd1306.h som Ui relaterade saker.

Källan, med fullständig kod.
https://hackaday.com/2014/01/02/qtledtest-software-to-evaluate-oled-displays/#comments


Upp
 Profil  
 
 Inläggsrubrik: Re: C++ Lost in classes
InläggPostat: 15.35 2018-02-09 
Användarvisningsbild

Blev medlem: 10.07 2008-01-22
Inlägg: 1616
Ort: Sollentuna
Om du nu verkligen _vill_ ha två olika klasser med samma namn, den ena i namespace:t "Ui", så behöver du deklarera
Ui::SSD1306 - du har nu bara gjort en "forward declaration", d.v.s. hintat kompilatorn om att det "kommer att finnas" en klass
med namnet Ui::SSD1306 så småningom...

T.ex. såhär:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
namespace Ui {
class SSD1306
{
 // fyll på med vad som behövs här...
};
}


Om nu detta _inte_ var fallet, så har Findecanor gett lösningen, inkludera hela klassdeklarationen inuti namespace-måsvingarna.

/j


Upp
 Profil  
 
 Inläggsrubrik: Re: C++ Lost in classes
InläggPostat: 16.10 2018-02-09 

Blev medlem: 15.11 2006-07-26
Inlägg: 360
Ort: Vasa, Finland
Detta är en halvgissning, men kör qmake förrän make. Att inte ha hela klassdeklarationen inkluderad i headerfilen borde inte vara något problem då det endast finns länkar till ui-klassen.


Upp
 Profil  
 
 Inläggsrubrik: Re: C++ Lost in classes
InläggPostat: 09.44 2018-02-12 
Användarvisningsbild

Blev medlem: 21.24 2011-12-10
Inlägg: 243
Ort: Nynäs
johano skrev:
Om du nu verkligen _vill_ ha två olika klasser med samma namn...
Nä det är inget jag vill utan jag undrade om man måste göra så när man kör Qt, då det är lätt att bli förvirrad när det är samma namn för olika saker. Qt är lite knepig att förstå med alla sina macro.

I ui_ssd1306.h finns redan ett namespace Ui. Automatgenerat av Qt-designer.
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
.
.
QT_BEGIN_NAMESPACE
class Ui_SSD1306
{
.
.
namespace Ui {
    class SSD1306: public Ui_SSD1306 {};
} // namespace Ui

QT_END_NAMESPACE
ui_ssd1306.h

Vad QT_BEGIN_NAMESPACE och QT_END_NAMESPACE är för macro har jag ingen aning om

Edit:
Det finns andra designer som gör så här:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
.
.
#include "ui_testform.h"

#include <QMainWindow>

class ThermoMeter;

class TestWidget : public QMainWindow,  private Ui::TestForm
    {
       Q_OBJECT
.
.
test.h
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
.
.

TestWidget::TestWidget(QMainWindow *parent)
        : QMainWindow(parent)
    {
        initialize ();
    connections();
    }

void TestWidget::initialize()
    {
      setupUi(this);
.
.
test.cpp

Det ser lite snyggare ut


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 4 inlägg ] 

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 2 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
    Electrokit
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010