2017-03-24 21 views
0

コンパイル中にスコープエラーが発生します。私が知っているように、ファスとしては、物事はどこにすべきか宣言されていないようですね。しかし、私の実装では間違いがないので、助けてください。コードが巨大なので、私はそれを合成します。 「比較」このスコープで宣言されていなかった。スコープArduinoスケッチを整形中にエラーが発生する

  /* Biblioteca padrão do Arduino */ 
     #include <Arduino.h> 
     #include <Agendamentos.h> 
     #include <LinkedList.h> 

     File arquivo; 
     File startcfg; 
     RTC_DS1307 rtc; 
     Mensageiro mensageiro; 
     char registrador_nivel; 

     int indiceFert, indiceEvento, indiceAgendamento; 

     LinkedList<Agendamentos*> agendamentos = LinkedList<Agendamentos*>(); 
     Start *start = new Start(); 
     Agendamentos *chamaFuncao = new Agendamentos(); 

     const byte HASH_SETOR_SIZE = 15; 
     HashType<int,int> hashRawArray[HASH_SETOR_SIZE]; 
     HashMap<int,int> hashMap = HashMap<int,int>(hashRawArray , HASH_SETOR_SIZE); 

     //--------- Decladando HashMap de Silos 
     const byte HASH_SILO_SIZE = 2; 
     HashType<char*,int> hashSiloArray[HASH_SILO_SIZE]; 
     HashMap<char*,int> hashMapSilo = HashMap<char*,int>(hashSiloArray ,HASH_SILO_SIZE); 


     void setup() { 

     hashMap.debug(); 
     hashMapSilo.debug(); 

     if (!rtc.begin()) { 
      Registrador::error("Nao foi possivel encontrar modulo RTC"); 
      while (1); 
     } 

     if (! rtc.isrunning()) { 
      Registrador::info("Inicializando m�dulo RTC!"); 
      rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); 
     } 

     char pontoParada; 
     Serial.begin(9600); 
     pinMode(PINO_SD_CS, OUTPUT); 
     if (!SD.begin(PINO_SD_CS)) { 
      Serial.println("O cartao falhou ao iniciar ou nao esta presente"); // Trocar "Serial.printl" por "Registrador:error" ap�s os testes. 
      return; 
     } 

     Serial.println("Cartao iniciado !"); 
     Serial.print("Comecando o Sketch em: "); 
     for (int i = 3; i > 0; i--) { 
      Serial.print(i); 
      Serial.print(' '); 
      delay(500); 
     } 

     Serial.println(); 
     Serial.println("Iniciando leitura do arquivo da programacao"); 

     arquivo = SD.open("Ferti.cal"); 

     if (arquivo.available()) { 
      Serial.println("FERTI.CAL:"); 
      Util::leCaracter(',', arquivo); 
      Util::leCaracter(',', arquivo); 
      Util::leCaracter(':', arquivo); 
     } 

     indiceAgendamento = 0; 

     while(arquivo.available()){ 
      Agendamentos *agendamento = new Agendamentos(); 
      chamaFuncao->openReadArquivo(agendamento); 
      agendamentos.add(agendamento); 
      Serial.print("agendamentos.size() ="); 
      Serial.println(agendamentos.size()); 
      indiceAgendamento++; 
      arquivo.read(); 
      arquivo.read(); 
      pontoParada = arquivo.read(); 

     } 

     startcfg = SD.open("Start.cfg"); 

     if (startcfg.available()) { 

      Serial.println("START.CFG:"); 
      Util::leCaracter(',', startcfg); 
      Util::leCaracter(':', startcfg); 
      start->openReadStart(startcfg); 
     } 

     Serial.println("Terminou de ler a programacao"); 
     Serial.println(); 
     Serial.println("Carregou conteudo para listas encadeadas ..."); 

     //Imprimindo a data e hora 
     DateTime now = rtc.now(); 
     Serial.print("Ordenando...DIA:"); 
     Serial.print(now.dayOfTheWeek()); 
     Serial.print(" "); 
     Serial.print(now.hour()); 
     Serial.print(':'); 
     Serial.print(now.minute()); 
     Serial.print(':'); 
     Serial.print(now.second()); 
     Serial.println(); 
     agendamentos.sort(compare); 

エラーが配置されているが、この最後の行の上エラーがあります。ですから、基本的に私はLinkedList.hに属するメソッドをソートするパラメータとしてAgendamentos.hにあるcompareメソッドを渡そうとしていますが、私は見ることができるようにAgendamentos.cppファイルに#includeと入力して両方のlibsをリンクしました:

あなたはコンテキストを提供するためにあなたのインスタンスを使用する必要が
/** 
    * Agendamentos.cpp - Implementa os métodos utilizados na obtenção de data e hora da aplicação. 

    **/ 

    #include <Agendamentos.h> 
    #include <Eventos.h> 
    #include <Fertilizantes.h> 
    #include <Util.h> 

    /* Bibliotecas de leitura e escrita para módulo SD */ 
    #include <SD.h> 
    #include <SPI.h> 

    /* Biblioteca de Lista Encadeada */ 
    #include <LinkedList.h> 

    /* Bibliotecas de data/hora para módulo DS1307 RTC */ 
    #include <Wire.h> 
    #include <RTClib.h> 
    #include <Time.h> 
    #include <TimeLib.h> 
    #include <TimeAlarms.h> 

    /* 
    * Method Name : Agendamentos 
    * 
    * Synopsis  : Agendamentos::Agendamentos() * 
    * Description : Construtor padrão da classe 
    * 
    */ 
    Agendamentos::Agendamentos(){ 
     _eventos = LinkedList<Eventos*>(); 

    } 

    /* 
    * Method Name : segundosAcontecer 
    * 
    * Synopsis  : void Agendamentos::segundosAcontecer(Agendamentos *agendamento) * 
    * Arguments : 
    * 
    * Description : Esta função retorna o delta segundos da hora atual em relação a hora de um agendamento recuperado no JSON. 
    * 
    */ 

    long Agendamentos::segundosAcontecer (Agendamentos*agendamento) { 

     DateTime now = rtc.now(); 

     long intervalo = (agendamento->getDia()*86400)+(agendamento->getHora()*3600)+(agendamento->getMinuto()*60)+(agendamento->getSegundo()) - 
     (now.dayOfTheWeek()*86400)-(now.hour()*3600)-(now.minute()*60)-(now.second()); 

     if(intervalo < 0){ 
      return intervalo + 604800; 
     } 

     return intervalo; 
    } 

    /* 
    * Method Name : compare 
    * 
    * Synopsis  : static void Agendamentos::compare(Agendamentos*&a, Agendamentos*&b) * 
    * Arguments : 
    * 
    * Description : Esta função irá comparar agendamentos através do delta S obtido pelo método "segundosAcontecer" e retornará 
    * valores do tipo int para em seguidas serem ordenados pelo método sort da biblioteca "LinkedList.h" 
    */ 
    int Agendamentos::compare(Agendamentos*&a, Agendamentos*&b) { 

     long c,d; 
     c = segundosAcontecer(a); 
     d = segundosAcontecer(b); 

     // l�gica strcmp 
     if(c<d) return -1; 
     else if(c==d) return 0; 
     else return 1; 
    } 

答えて

0

:agendamentos.compare

EDIT - 例えばagendametos.sort(agendamentos.compare)

+0

本当に何を意味しているのかわかりませんが、このようなことをしてください:agendamentos.sort(instance-> compare)が機能しませんでした – Rezik

0

パラメタとして渡されるすべてのメソッドをstaticに変換する方法がありました。したがって、agendamentos.sort(Agendamentos :: compare)はこの問題を解決しました。

関連する問題