Problema codeblocks windows! Urgentissimo!!!

di il
19 risposte

Problema codeblocks windows! Urgentissimo!!!

Salve a tutti! Sono uno studente del Polito e ho a Che fare con un progetto c++ svolto Che non riesco a far girare sul mio computer.
Sul computer del collega Che mi ha passato il codice funziona, ma lui ha un sistema operativo diverso da Windows.
Io uso codeblocks e ho Windows e qui mi da 37 errori e 4 warnings.
Ho provato lo stessissimo codice ai computer del laib del politecnico e qui, invece mi da 22 errori e 5 warning ( su questo computer c'e' anche Windows come sistema operativo).
Penso Che il problema sia quindi Windows stesso.
Il Mio collega ha detto Che devo far risolvere il problema da qualche informatico per farlo partire in Windows sul mio pc.
All'esame devo far vedere al professore con il portatile Che funziona!
Potreste darmi un consiglio per piacere?
Grazie in anticipo!

19 Risposte

  • Re: Problema codeblocks windows! Urgentissimo!!!

    Fai una partizione e installa Linux.

    Se invece vuoi risolvere devi ovviamente postare codice e messaggi di errore
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Il codice e' troppo lungo! Ci sono tante sorgenti e
    Il codice e' lungo. Sono centinaia di righe di codice!
    Scusate l'ignoranza ma possono coesistere Windows e linux contemporaneamente sul mio computer? Io in vita mia ho usato solo Windows.
    Grazie per la risposta comunque.
    Cmq gli errori sono quelli tipo:
    error: 'class std::vector<const GeDiM::GenericEdge*> has no member named 'shrink_to_fit'
    Questo tipo di errori sono segnalate in due delle
    sorgenti Che il professore ci ha dato ma lui ha detto Che tutte le sorgenti non dobbiamo toccarle ma Che dovevamo solo cambiare il programma principale e questo e' stato gia' fatto!
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Anche il Mio collega ha accennato ad Una partizione da fare riguardo Windows... Forse si riferiva a questo!
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Shrink_to_fit() è C++11. Che compilatore stai usando? Ce l'hai l'opzione C++11 ?
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Ciao! Ho provato ad andare in Settings-->Compiler-->Compiler Flags e qui c'e' Una lista di varie code e ho provato a mettere:
    Have g++ follow the C++11 ISO C++ language standard [-std=c++11]

    e poi ho provato a cambiare con
    Have g++ follow the coming C++0x (aka c++11) ISO language standard.
    Poi ho provato a toglierle e mettere tutto come prima e non da piu' 37 errori e 4 warning ma adesso da 20 errori e zero warning.
    In quest'ultima situazione da errori come:
    error: class std::vector<const GeDiM::GenericEdge*>' has no member named 'shrink_to_fit.
    Poi da un altro tipo di errore Che prima non dava tipo:

    Output::ExitCodes TriangleRefiner::RefineTriangle()
    Invece lasciando uno dei due C++11 mi da solo 5 errori come:
    Output::ExitCodes TriangleRefiner:: RefineTriangle() Che,ripeto, prima non dava.

    Come devo procedere? Grazie mille!
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Il codice evidentemente non può funzionare senza la flag -std=c++11. Magari ti serve addirittura -std=c++14 o -std=c++17. Copia esattamente tutte le flag dal PC dove compila senza errori.

    Mi sa che hai installato una versione del compilatore molto vecchia, siamo al C++20, altro che upcoming C++11. Se non ne esci fuori prova a ripartire da capo installando versioni aggiornate
    di compilatore e IDE, magari MinGW + Netbeans.

    Intanto lascia C++11 e scrivi l'errore completo su RefineTriangle, così non vuol dire nulla
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Ok! Ho provato a mettere
    Have g++ follow the coming C++1z (aka C++17) ISO C++ language standard [-stc=c++1z]
    E ho solo cinque errori:
    1) error: prototype for 'MainApplications::Output::ExitCodes GediM::TriangleRefiner::RefineTriangle(const unsigned int& value, bool tol) does not any class
    2)error: candidate is: MainAplication::Output::ExitCodes GediM::TriangleRefiner::RefineTriangle(const unsigned int&)
    3)error: prototype for 'MainApplications::Output::ExitCodes GeDiM::TriangleRefiner::RefineMesh(bool)' does not any match in class
    4)error: candidate is: MainApplication::Output::ExitCodes GeDiM::TriangleRefiner::RefineMesh()
    5)error: no 'void GeDiM::TriangleRefiner::LongestEdgeSort(const unsigned int&, bool)' member function declared in class 'GeDim::
    Questo tipo di errori non c'erano quando mi comparivano 37 errori e 4 warning (ovvero prima di fare delle prove in settings-->compiler-->Global compiler settings)
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Volevo solo far notare che ho codeblocks versione 17.12 su Windows 10.
    Grazie ancora!
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Beh questi sono errori autentici
    Ad esempio non ha trovato il prototipo RefineMesh(bool), si aspettava RefineMesh(void). Controlla la classe in questione, sia in cpp che nell'header h, controlla anche che non ci siano header che fanno conflitto con definizioni diverse
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Ciao e grazie! Volevo solo sapere se Visual Studio potrebbe essere la soluzione al mio problema anche perche' penso sia un errore di Compiler.
    Ma e' vero Che visual studio e' piu' potente di codeblocks per quanto riguarda progetti piu' complessi in c++?
    Attendo risposta!
    Grazie per il bel lavoro Che fate su questo forum!
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Ma che c'entra quanto è potente il compilatore? Se i prototipi sono sbagliati lo sono per ogni compilatore. Modificali oppure posta il codice della classe
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Ciao! questa sarà l'ultima cosa che chiedo anche perchè sicuramente mi sto perdendo in un bicchiere d'acqua.

    CHIEDO DI IGNORARE GRAN PARTE DI TriangleRefiner.cpp PERCHE' E' TROPPO LUNGO E VI CHIEDO DI SOFFERMARVI DOVE C'è SCRITTO
    qUI DA ERRORE(ATTENZIONE!!!) e questi sono gli errori che da:

    1)C:\Users\utente\Desktop\progettoCppWin\progettoCppWin\ProgettoCppWin\TriangleRefiner.cpp|8|error: prototype for 'MainApplication::Output::ExitCodes GeDiM::TriangleRefiner::RefineTriangle(const unsigned int&, bool)' does not match any in class 'GeDiM::TriangleRefiner'|

    2)C:\Users\utente\Desktop\progettoCppWin\progettoCppWin\ProgettoCppWin\TriangleRefiner.hpp|27|error: candidate is: MainApplication::Output::ExitCodes GeDiM::TriangleRefiner::RefineTriangle(const unsigned int&)|

    3)C:\Users\utente\Desktop\progettoCppWin\progettoCppWin\ProgettoCppWin\TriangleRefiner.cpp|332|error: prototype for 'MainApplication::Output::ExitCodes GeDiM::TriangleRefiner::RefineMesh(bool)' does not match any in class 'GeDiM::TriangleRefiner'|

    4)C:\Users\utente\Desktop\progettoCppWin\progettoCppWin\ProgettoCppWin\TriangleRefiner.hpp|26|error: candidate is: MainApplication::Output::ExitCodes GeDiM::TriangleRefiner::RefineMesh()|

    5)C:\Users\utente\Desktop\progettoCppWin\progettoCppWin\ProgettoCppWin\TriangleRefiner.cpp|390|error: no 'void GeDiM::TriangleRefiner::LongestEdgeSort(const unsigned int&, bool)' member function declared in class 'GeDiM::TriangleRefiner'|

    Questa di seguito è TriangleRefiner.hpp
    #ifndef TRIANGLEREFINER_HPP
    #define TRIANGLEREFINER_HPP

    #include "GenericDomain.hpp"
    #include "GenericMesh.hpp"
    #include "Eigen/Eigen"

    using namespace std;
    using namespace Eigen;

    namespace GeDiM
    {
    class TriangleRefiner
    {
    protected:
    GenericMesh* meshPointer;
    vector<unsigned int> idCellsToRefine;
    public:
    TriangleRefiner() { meshPointer = NULL; }
    ~TriangleRefiner() { }

    void SetMesh( GenericMesh& mesh ) { meshPointer = &mesh; }
    void SetNumberCellsToRefine( const unsigned int& value ) { idCellsToRefine.reserve(value); }
    void AddCellId( const unsigned int& value ) { idCellsToRefine.push_back(value); }

    Output::ExitCodes RefineMesh() { RefineTriangle(idCellsToRefine[0]); return Output::Success; } // qui da errore 4)(ATTENZIONE!!!!)
    Output::ExitCodes RefineTriangle(const unsigned int& value); // qui da errore 2) (ATTENZIONE!!!)
    };
    }

    #endif

    e questa è TriangleRefiner.cpp

    #include "TriangleRefiner.hpp"
    #include "Output.hpp"

    using namespace std;

    namespace GeDiM
    {
    Output::ExitCodes TriangleRefiner::RefineTriangle(const unsigned int& value, bool tol) // qui da errore 1) (ATTENZIONE!!!)
    {
    GenericCell* cell = meshPointer->Cell(value);
    LongestEdgeSort(value,tol);

    int flagEdge[3] ={0};
    unsigned int currId;

    for (int i = 0; i < 3; ++i)
    {
    currId = cell->Edge(i)->Id();
    for (unsigned int j = 0; j < RefinedEdge.size(); j++)
    {
    if(currId == RefinedEdge[j]->Id())
    flagEdge=1;
    }
    for (unsigned int j = 0; j < MarkedEdge.size(); j++)
    {
    if(currId == MarkedEdge[j]->Id())
    flagEdge=1;
    }
    }

    if(flagEdge[1] && flagEdge[2] && flagEdge[0])
    {
    cell->SetState(false);
    const GenericPoint* midPoint[3];

    for (int i = 0; i < 3; i++)
    {
    GenericEdge* currEdge = meshPointer->Edge(cell->Edge(i)->Id());
    const GenericPoint* P0 = meshPointer->Point(currEdge->Point(0)->Id());
    const GenericPoint* P1 = meshPointer->Point(currEdge->Point(1)->Id());

    if(currEdge->IsActive())
    {
    GenericPoint* Pm = meshPointer->CreatePoint();
    meshPointer->AddPoint(Pm);
    Pm->SetCoordinates( 0.5*(P0->Coordinates()+P1->Coordinates()) );
    Pm->SetMarker(currEdge->Marker());

    GenericEdge* Ei = meshPointer->CreateEdge();
    meshPointer->AddEdge(Ei);
    Ei->AddPoint(currEdge->Point(0));
    Ei->AddPoint(Pm);
    Ei->InitializeCells(2);

    GenericEdge* Ee = meshPointer->CreateEdge();
    meshPointer->AddEdge(Ee);
    Ee->AddPoint(Pm);
    Ee->AddPoint(currEdge->Point(1));
    Ee->InitializeCells(2);

    currEdge->SetState(false);
    RefinedEdge.push_back(currEdge);
    currEdge->InitializeChilds(2);
    currEdge->AddChild(Ei);
    currEdge->AddChild(Ee);
    Ei->SetFather(currEdge);
    Ee->SetFather(currEdge);

    midPoint = Pm;
    }
    else
    {
    GenericEdge* Ei = (GenericEdge*) currEdge->Child(1);
    GenericEdge* Ee = (GenericEdge*) currEdge->Child(0);
    midPoint = Ei->Point(0);


    if((P0->Id()==Ee->Point(0)->Id()) || (P0->Id()==Ee->Point(1)->Id())){
    GenericEdge* Etemp = Ei;
    Ei = Ee;
    Ee = Etemp;
    }

    bool flag=false;

    for(int j=0; j<3; j++){
    if(Ei->Point(0)->Id()==cell->Point(j)->Id())
    flag = true;
    }

    if(flag)
    midPoint = Ei->Point(1);
    }
    }

    GenericEdge* newEdge[3];
    for (int i = 0; i < 3; i++)
    {
    GenericEdge* eTemp = meshPointer->CreateEdge();
    eTemp->InitializeCells(2);
    meshPointer->AddEdge(eTemp);
    eTemp->AddPoint(midPoint);
    eTemp->AddPoint(midPoint[(i+2)%3]);

    newEdge = eTemp;
    }

    cell->InitializeChilds(4);

    GenericCell* newCell[4];
    GenericCell* cTemp;

    for(int i=0; i<3; i++){
    cTemp = meshPointer->CreateCell();
    meshPointer->AddCell(cTemp);
    cell->AddChild(cTemp);
    cTemp->SetFather(cell);

    cTemp->InitializePoints(3);
    cTemp->InitializeEdges(3);

    cTemp->AddPoint(cell->Point(i));
    cTemp->AddPoint(midPoint);
    cTemp->AddPoint(midPoint[(i+2)%3]);

    cTemp->AddEdge(newEdge);

    GenericEdge* eChild = (GenericEdge*) meshPointer->Edge(cell->Edge(i)->Id())->Child(1);

    if(!((cell->Point(i)->Id()==eChild->Point(0)->Id()) || (cell->Point(i)->Id()==eChild->Point(1)->Id())))
    eChild = (GenericEdge*) meshPointer->Edge(cell->Edge(i)->Id())->Child(0);

    cTemp->AddEdge(eChild);
    eChild->AddCell(cTemp);

    eChild = (GenericEdge*) meshPointer->Edge(cell->Edge((i+2)%3)->Id())->Child(1);

    if(!((cell->Point(i)->Id()==eChild->Point(0)->Id()) || (cell->Point(i)->Id()==eChild->Point(1)->Id())))
    eChild = (GenericEdge*) meshPointer->Edge(cell->Edge((i+2)%3)->Id())->Child(0);

    cTemp->AddEdge(eChild);
    eChild->AddCell(cTemp);

    newCell = cTemp;
    }

    cTemp = meshPointer->CreateCell();
    meshPointer->AddCell(cTemp);
    cell->AddChild(cTemp);
    cTemp->SetFather(cell);

    cTemp->InitializePoints(3);
    cTemp->InitializeEdges(3);

    for (int i = 0; i < 3; i++)
    {
    cTemp->AddEdge(newEdge[i]);
    cTemp->AddPoint(midPoint[i]);
    newEdge[i]->AddCell(cTemp);
    newEdge[i]->AddCell(newCell[i]);
    }

    newCell[3]= cTemp;
    }
    else
    {
    GenericEdge* E0 = meshPointer->Edge(cell->Edge(0)->Id());
    GenericEdge* E1 = meshPointer->Edge(cell->Edge(1)->Id());
    GenericEdge* E2 = meshPointer->Edge(cell->Edge(2)->Id());
    GenericEdge* Em = meshPointer->CreateEdge();
    Em->InitializeCells(2);
    meshPointer->AddEdge(Em);
    const GenericPoint* P0 = cell->Point(0);
    const GenericPoint* P1 = cell->Point(1);

    if( E0->IsActive() )
    {
    GenericPoint* Pm = meshPointer->CreatePoint();
    meshPointer->AddPoint(Pm);
    Pm->SetCoordinates( 0.5*(P0->Coordinates()+P1->Coordinates()) );
    Pm->SetMarker(E0->Marker());

    GenericEdge* Ei = meshPointer->CreateEdge();
    Ei->InitializeCells(2);
    meshPointer->AddEdge(Ei);
    Ei->AddPoint(P0);
    Ei->AddPoint(Pm);
    GenericEdge* Ee = meshPointer->CreateEdge();
    Ee->InitializeCells(2);
    meshPointer->AddEdge(Ee);
    Ee->AddPoint(Pm);
    Ee->AddPoint(P1);

    E0->SetState(false);
    RefinedEdge.push_back(E0);
    E0->InitializeChilds(2);
    E0->AddChild(Ei);
    E0->AddChild(Ee);
    Ei->SetFather(E0);
    Ee->SetFather(E0);

    GenericCell* Cd = meshPointer->CreateCell();
    meshPointer->AddCell(Cd);
    GenericCell* Cs = meshPointer->CreateCell();
    meshPointer->AddCell(Cs);

    Em->AddCell(Cd);
    Em->AddCell(Cs);

    cell->SetState(false);
    cell->InitializeChilds(2);
    cell->AddChild(Cd);
    cell->AddChild(Cs);
    Cd->SetFather(cell);
    Cs->SetFather(cell);

    Cd->InitializePoints(3);
    Cd->InitializeEdges(3);
    Cd->AddPoint(P0);
    Cd->AddPoint(Pm);
    Cd->AddPoint(cell->Point(2));
    Cd->AddEdge(Ei);
    Cd->AddEdge(Em);
    Cd->AddEdge(E2);
    Ei->AddCell(Cd);

    Cs->InitializePoints(3);
    Cs->InitializeEdges(3);
    Cs->AddPoint(Pm);
    Cs->AddPoint(P1);
    Cs->AddPoint(cell->Point(2));
    Cs->AddEdge(Ee);
    Cs->AddEdge(Em);
    Cs->AddEdge(E1);
    Ee->AddCell(Cs);

    Em->AddPoint(Pm);
    Em->AddPoint(cell->Point(2));

    int posToErase = 0;
    if(value == E1->Cell(1)->Id())
    posToErase = 1;

    E1->EraseCell(posToErase);

    posToErase = 0;
    if(value == E2->Cell(1)->Id())
    posToErase = 1;

    E2->EraseCell(posToErase);

    E1->AddCell(Cs);
    E2->AddCell(Cd);
    }

    else
    {
    GenericEdge* Ei = (GenericEdge*) E0->Child(1);
    GenericEdge* Ee = (GenericEdge*) E0->Child(0);

    if((P0->Id()==Ee->Point(0)->Id()) || (P0->Id()==Ee->Point(1)->Id())){
    GenericEdge* Etemp = Ei;
    Ei = Ee;
    Ee = Etemp;
    }

    const GenericPoint* Pm = Ei->Point(0);
    bool flag = false;

    for(int i=0; i<3; i++){
    if(Pm->Id()==cell->Point(i)->Id())
    flag = true;
    }
    if(flag)
    Pm = Ei->Point(1);

    GenericCell* Cd = meshPointer->CreateCell();
    meshPointer->AddCell(Cd);
    GenericCell* Cs = meshPointer->CreateCell();
    meshPointer->AddCell(Cs);

    Em->AddCell(Cd);
    Em->AddCell(Cs);

    cell->SetState(false);
    cell->InitializeChilds(2);
    cell->AddChild(Cd);
    cell->AddChild(Cs);
    Cd->SetFather(cell);
    Cs->SetFather(cell);

    Cd->InitializePoints(3);
    Cd->InitializeEdges(3);
    Cd->AddPoint(P0);
    Cd->AddPoint(Pm);
    Cd->AddPoint(cell->Point(2));
    Cd->AddEdge(Ei);
    Cd->AddEdge(Em);
    Cd->AddEdge(E2);
    Ei->AddCell(Cd);

    Cs->InitializePoints(3);
    Cs->InitializeEdges(3);
    Cs->AddPoint(Pm);
    Cs->AddPoint(P1);
    Cs->AddPoint(cell->Point(2));
    Cs->AddEdge(Ee);
    Cs->AddEdge(Em);
    Cs->AddEdge(E1);
    Ee->AddCell(Cs);

    Em->AddPoint(Pm);
    Em->AddPoint(cell->Point(2));

    int posToErase = 0;
    if(E1->HasLeftCell() && value == E1->Cell(1)->Id())
    posToErase = 1;
    E1->EraseCell(posToErase);

    posToErase = 0;
    if(E2->HasLeftCell() && value == E2->Cell(1)->Id())
    posToErase = 1;
    E2->EraseCell(posToErase);

    E1->AddCell(Cs);
    E2->AddCell(Cd);
    }
    }
    return Output::Success;
    }

    Output::ExitCodes TriangleRefiner::RefineMesh(bool tol) // qui da errore 3) (ATTENZIONE!!!!!)
    {
    GenericCell* MarkedCell;
    int idMarkedCell;
    unsigned int i=0;

    for(i=0;i<idCellsToRefine.size();i++)
    {
    idMarkedCell=idCellsToRefine[i];
    MarkedCell = meshPointer->Cell(idMarkedCell);
    LongestEdgeSort(idMarkedCell,tol);
    MarkedEdge.push_back(MarkedCell->Edge(0));
    }

    for(i=0;i<idCellsToRefine.size();i++){
    RefineTriangle(idCellsToRefine[i], tol);
    }


    i=0;
    int idActiveCell;
    bool NoConf;
    const GenericEdge* currEdge;

    while(i<RefinedEdge.size()){
    currEdge = RefinedEdge[i];

    idActiveCell = -1;


    if(currEdge->HasLeftCell() && meshPointer->Cell(currEdge->LeftCell()->Id())->IsActive()){
    idActiveCell = currEdge->LeftCell()->Id();
    }
    else if(currEdge->HasRightCell() && meshPointer->Cell(currEdge->RightCell()->Id())->IsActive()){
    idActiveCell = currEdge->RightCell()->Id();
    }

    if(idActiveCell!=-1){
    RefineTriangle(idActiveCell, tol);
    }

    NoConf = false;
    for (unsigned int j = 0; j < RefinedEdge.size(); j++)
    {
    if((RefinedEdge[j]->HasRightCell() && RefinedEdge[j]->RightCell()->IsActive()) \
    || (RefinedEdge[j]->HasLeftCell() && RefinedEdge[j]->LeftCell()->IsActive()))
    NoConf = true;
    }

    i++;

    if(i==RefinedEdge.size() && NoConf)
    i=0;
    }

    return Output::Success;
    }

    void TriangleRefiner::LongestEdgeSort(const unsigned int &value, bool tol) // qui da errore 5)(ATTENZIONE!!!!)
    {
    GenericCell *cell = meshPointer->Cell(value);

    int k = -1;
    double curr;
    double max = -1;

    const GenericEdge* copia[3];
    for (int i = 0; i < 3; i++)
    copia[i] = meshPointer->Edge(cell->Edge(i)->Id());

    for (int i = 0; i < 3; i++)
    {

    curr = pow(pow(cell->Edge(i)->Point(0)->X() - cell->Edge(i)->Point(1)->X(), 2)
    + pow(cell->Edge(i)->Point(0)->Y() - cell->Edge(i)->Point(1)->Y(), 2), 0.5);

    if (curr > max) {
    k = i;
    max = curr;
    }
    }

    for (int i = 0; i < 3 && tol; i++)
    {
    if(i!=k)
    {
    curr = pow(pow(cell->Edge(i)->Point(0)->X() - cell->Edge(i)->Point(1)->X(), 2)
    + pow(cell->Edge(i)->Point(0)->Y() - cell->Edge(i)->Point(1)->Y(), 2), 0.5);
    }

    bool marcato = false;

    if((max-curr)<max*0.15)
    {
    for(unsigned int j=0; j < MarkedEdge.size() && !marcato; j++)
    {
    if(cell->Edge(i)->Id() == MarkedEdge[j]->Id()){
    marcato = true;
    }
    }

    for(unsigned int j=0; j < RefinedEdge.size() && !marcato; j++)
    {
    if(cell->Edge(i)->Id() == RefinedEdge[j]->Id()){
    marcato = true;
    }
    }

    if(marcato)
    {
    k=i;
    break;
    }
    }
    }



    if(k==1){
    cell->InsertEdge(copia[0],2);
    cell->InsertEdge(copia[1],0);
    cell->InsertEdge(copia[2],1);
    }
    else if(k==2){
    cell->InsertEdge(copia[0],1);
    cell->InsertEdge(copia[1],2);
    cell->InsertEdge(copia[2],0);
    }


    const GenericPoint* P2;
    for(int i=0; i<3; i++){
    P2 = cell->Point(i);
    if((P2->Id()!=cell->Edge(0)->Point(0)->Id()) && (P2->Id()!=cell->Edge(0)->Point(1)->Id())){
    break;
    }
    }


    const GenericPoint* P0;

    for(int i=0; i<3; i++){
    P0 = cell->Point(i);
    if((P0->Id()!=cell->Edge(1)->Point(0)->Id()) && (P0->Id()!=cell->Edge(1)->Point(1)->Id())){
    break;
    }
    }

    const GenericPoint* P1;

    for(int i=0; i<3; i++){
    P1 = cell->Point(i);
    if((P1->Id()!=cell->Edge(2)->Point(0)->Id()) && (P1->Id()!=cell->Edge(2)->Point(1)->Id())){
    break;
    }
    }

    cell->InsertPoint(P0,0);
    cell->InsertPoint(P1,1);
    cell->InsertPoint(P2,2);
    }

    }

    Vi ringrazio tantissimo!
  • Re: Problema codeblocks windows! Urgentissimo!!!

    È esattamente come ti sta dicendo il compilatore: nello header hai dichiarato RefineMesh() , poi però hai implementato RefineMesh(bool tol) nel sorgente. Scegline uno dei due e controlla che i prototipi siano coerenti nello header e nel sorgente. Se non usi RefineMesh da nessuna parte, commentali entrambe.

    Discorso analogo per gli altri errori

    Se questi sono i sorgenti originali del prof, vuol dire che il prof li ha modificati e poi si è dimenticato di darti gli header aggiornati, o magari esiste un altro header coi prototipi giusti nel progetto sul PC dove compila, oppure chissà. Ma comunque questi sono errori reali, quindi chiedi pure al prof
  • Re: Problema codeblocks windows! Urgentissimo!!!

    Buongiorno a tutti! Ho preso il trianglerefine.hpp aggiornato che è il seguente:

    #ifndef TRIANGLEREFINER_HPP
    #define TRIANGLEREFINER_HPP

    #include "GenericDomain.hpp"
    #include "GenericMesh.hpp"
    #include "Eigen/Eigen"

    using namespace std;
    using namespace Eigen;

    namespace GeDiM
    {
    class TriangleRefiner
    {
    protected:
    GenericMesh* meshPointer;
    vector<unsigned int> idCellsToRefine;
    vector<const GenericEdge*> RefinedEdge;
    vector<const GenericEdge*> MarkedEdge;
    int cntTagli;

    public:
    TriangleRefiner() { meshPointer = NULL; cntTagli=0;}
    ~TriangleRefiner() { }

    void SetMesh( GenericMesh& mesh ) { meshPointer = &mesh; }
    void SetNumberCellsToRefine( const unsigned int& value ) { idCellsToRefine.reserve(value); }
    void AddCellId( const unsigned int& value ) { idCellsToRefine.push_back(value); }

    void LongestEdgeSort(const unsigned int& value, bool tol);
    int getCntTagli(){return cntTagli;};

    Output::ExitCodes RefineMesh(bool tol); // l'errore di main.cpp ha a che fare con questo (ATTENZIONE!!!) note 1) e 2)//
    Output::ExitCodes RefineTriangle(const unsigned int& value, bool tol);
    };
    }

    #endif

    Adesso non ci sono più 5 errori ma 1ERRORE SOLTANTO e precisamente ha a che fare con il main.cpp qui di seguito:

    #include "GenericDomain.hpp"
    #include "GenericMesh.hpp"
    #include "MeshImport_Triangle.hpp"
    #include <iostream>
    #include "TriangleRefiner.hpp"

    using namespace GeDiM;
    using namespace Eigen;

    int main(int argc, char** argv)
    {
    /// CREATE DOMAIN
    const unsigned int numDomainVertices = 4;
    GenericDomain2D domain(0,numDomainVertices);
    vector<Vector3d> vertexCoords(numDomainVertices);
    vertexCoords[0] << 0.0, 0.0, 0.0;
    vertexCoords[1] << 1.0, 0.0, 0.0;
    vertexCoords[2] << 1.0, 1.0, 0.0;
    vertexCoords[3] << 0.0, 1.0, 0.0;
    for(unsigned int i = 0; i < numDomainVertices; i++)
    {
    domain.AddVertex(vertexCoords);
    domain.AddEdge(i, (i+1)%numDomainVertices);
    }
    domain.Initialize();

    /// MESH DOMAIN
    MeshImport_Triangle meshCreator;
    meshCreator.SetMaximumCellSize(1e-2);
    meshCreator.CreateTriangleInput(domain);
    meshCreator.CreateTriangleOutput(domain);
    GenericMesh mesh;
    meshCreator.CreateMesh(domain, mesh);
    Output::PrintGenericMessage("Triangle ha prodotto una mesh contenente %d triangoli, %d nodi e %d lati", true, mesh.NumberOfCells(), mesh.NumberOfPoints(), mesh.NumberOfEdges());

    /// REFINE MESH
    TriangleRefiner refiner;
    refiner.SetMesh(mesh);
    refiner.SetNumberCellsToRefine(1);
    refiner.AddCellId(16);
    refiner.RefineMesh(); // qui da errore (ATTENZIONE!!!) // Eroore vero e proprio 3)

    /// OUTPUT MESH TO MATLAB SCRIPT FOR VISUALIZATION
    ofstream file("plotTriangleMesh.m", ofstream::out);
    file << "nodes = [";
    for(unsigned int i = 0; i < mesh.NumberOfPoints(); i++)
    file << mesh.Point(i)->Coordinates()(0) << "," << mesh.Point(i)->Coordinates()(1) << ";" << endl;
    file << "];" << endl;

    file << "triangles = [";
    for(unsigned int i = 0; i < mesh.NumberOfCells(); i++)
    {
    file << mesh.Cell(i)->Point(0)->Id()+1 << "," << mesh.Cell(i)->Point(1)->Id()+1 << "," << mesh.Cell(i)->Point(2)->Id()+1 << ";" << endl;
    }
    file << "];" << endl;
    file << "trimesh(triangles, nodes(:,1), nodes(:,2));" << endl;
    file.close();

    }

    E più precisamente;
    3)E:\progettoCppWin\progettoCppWin\ProgettoCppWin\main.cpp|41|error: no matching function for call to 'GeDiM::TriangleRefiner::RefineMesh()'|

    Poi mette due note come:
    1)E:\progettoCppWin\progettoCppWin\ProgettoCppWin\TriangleRefiner.hpp|33|note: candidate: MainApplication::Output::ExitCodes GeDiM::TriangleRefiner::RefineMesh(bool)|

    2)E:\progettoCppWin\progettoCppWin\ProgettoCppWin\TriangleRefiner.hpp|33|note: candidate expects 1 argument, 0 provided|

    Secondo voi come potrebbe essere?
    Buona giornata!
Devi accedere o registrarti per scrivere nel forum
19 risposte