# Abfrage des Elements ... in ... das vom Nicht-Klassentyp ... ist



## fbfeix (5. Januar 2012)

Hallo Leute,

Bin gerade dabei so ne Art CSS-Parser zu entwickeln und zwar vor allem deswegen weil ich mir mal die boost::regex library anschauen will. Hab auch grad keinen Fehler was das angeht.... wollte aber wissen was man den noch so in einen solchen Parser einbauen könnte. Aber nun zum Fehler: Ich hab ne Klasse "StyleBlock":


```
#include <boost/regex.hpp>
#include <string>
#include <iostream>

class StyleBlock
{
    public:
        /** Default constructor */
        StyleBlock();
        /** Default destructor */
        virtual ~StyleBlock();
        /** Copy constructor
         *  \param other Object to copy from
         */
        StyleBlock(const StyleBlock& other);
        /** Assignment operator
         *  \param other Object to assign from
         *  \return A reference to this
         */
        StyleBlock& operator=(const StyleBlock& other);

        void FromString(const std::string content);
    protected:
    private:
};
```

sowie dessen Implementierung:

```
#include "../include/styleblock.h"

StyleBlock::StyleBlock()
{
    //ctor
}

StyleBlock::~StyleBlock()
{
    //dtor
}

StyleBlock::StyleBlock(const StyleBlock& other)
{
    //copy ctor
}

StyleBlock& StyleBlock::operator=(const StyleBlock& rhs)
{
    if (this == &rhs) return *this; // handle self assignment
    //assignment operator
    return *this;
}

void StyleBlock::FromString(const std::string content)
{
    try
    {
        boost::regex reg("[. #[]\"\'#>]+\{(.*)}");

        boost::smatch match;

        //Startposition zum Suchen
        std::string::const_iterator it1 = content.begin();
        //Endposition zum Suchen
        std::string::const_iterator it2 = content.end();

        while(boost::regex_search(it1, it2, match, reg))
        {
            if(match[1].matched)
            {
                std::cout << match[1] << std::endl;
            }
        }
    }
    catch(...)
    {
        std::cout << "Ein unwerwarteter Fehler ist aufgetreten. Versuchen Sie es bitte erneut" << std::endl;
    }
}
```

desweiteren die main-Funktion:


```
#include <iostream>

#include "include/styleblock.h"
using namespace std;

int main()
{
    StyleBlock sb();
    sb.FromString(".block {irgendetwas: eigenschaft} .block > .nummer2{eigenschaft: ander;}");
    cout << "Hello world!" << endl;
    return 0;
}
```

Leider gibt er mir bei der Ausführung diesen Fehler aus:

Fehler: Abfrage des Elementes »FromString« in »sb«, das vom Nicht-Klassentyp »StyleBlock()« ist|
||=== Build finished: 1 errors, 0 warnings ===|

Kann mir da vll jemand helfen?


----------



## ibafluss (5. Januar 2012)

Ich kenne mich auf diesem Gebiet leider nicht so gut aus, aber bei einer Objektdefinition müssen doch die Klammern danach weg oder? Ist ja keine Funktion.


```
StyleBlock sb;
```


----------



## fbfeix (5. Januar 2012)

ja ich bin mir jetz auch nicht ganz sicher.... war die letzte Zeit mehr beim PHP programmiern
aber wenn ich die weglasse kommt der Fehler:

undefined reference to 'StyleBlock::StyleBlock()'

und er haut mir sämtliche Fehler von boost raus
zum Beispiel:
undefined reference to 'boost::re_detail:: perl_matcher.......
undefined reference to 'boost::basic_regex<....
usw...


----------



## ibafluss (5. Januar 2012)

Komisch, normalerweise bekommt man solche Fehlermeldungen nur, wenn man vergisst, die Implementierungen zu verlinken. Ich bekomme jedenfalls keine Fehlermeldungen, wenn ich das laufen lasse.

Lg


----------



## fbfeix (5. Januar 2012)

Ja ich bin jetzt auf Ubuntu... auf Windows hatte ich das auch noch nie, obwohl ich da den gleichen Compiler verwende


----------



## jokey2 (11. Januar 2012)

versuch's mal mit

```
StyleBlock sb = new StyleBlock();
```


----------

