C ++编译器未定义的引用。但功能已定义

时间:2018-05-05 08:31:44

标签: c++ arduino undefined-reference arduino-esp8266

好的,所以我的编译器有一个恼人的问题 一个毫无意义的错误。 首先,我使用的是Arduino IDE和ESP8266 Web服务器库 以下是导致问题的代码摘录。

这是标题

#ifndef __ClockServer_H 
#define __ClockServer_H  

class ClockServer
{
  public:
    ClockServer(const char* ssid, const char* pass, IPAddress ip, IPAddress gateway);
    ClockData getClockData(void);
    TimeData getTimeData(void);
    ...
};
#endif

这是身体的相关部分(ESP库包含在不同的模块中)

#include "ClockServer.h"

/*===============================
 * Globals for the server class
 =================================*/
ESP8266WebServer server(80);
String indexPage;
bool dataChanged;
ClockData serverClockData;
int timeZone = 12;
TimeData td;
...
/*====================================
 * Initialize The Clock Server Object
 =====================================*/

ClockServer::ClockServer(const char* ssid, const char* pass, IPAddress ip, IPAddress gateway){
  dataChanged = false;
  wifiNetwork = ssid;
  wifiPass = pass;
  wifiIP = ip;
  wifiGateway = gateway;
}
... 
/*=============================================
 * Grabing the Time Data from the server
 ==============================================*/
TimeData getTimeData(){
  return td;
}
...
/*=============================================
 *               Server Update Loop
 ==============================================*/
void ClockServer::serverUpdate(){
  server.handleClient(); //basicley just waits for url changes and trigers the server.on(url) event
  updateTimeData();
  Serial.println(td.toString());
  //TEST:!!!!
  Serial.println(getTimeData().toString());
}

现在,行"Serial.println(td.toString());"正常运行

但是当我使用Serial.println(getTimeData().toString());时 编译器不断抛出LEDClock / ClockServer.ino:314:未定义的引用`ClockServer :: getTimeData()'错误

但ClockServer :: getTimeData()已明确定义

... 
/*=============================================
 * Grabing the Time Data from the server
 ==============================================*/
TimeData getTimeData(){
  return td;
}
...

并在标题中

TimeData getTimeData(void);

现在,行"Serial.println(td.toString());""Serial.println(getTimeData().toString());"基本相同,唯一的区别是我使用函数来获取td并且编译器认为该函数是未定义的引用< / p>

所以我不知道是什么导致了这个问题。请帮忙。

0 个答案:

没有答案