我有一個模板類SERVOLINK其標題文件是「/包括」和它的源文件是「/ SRC」。 CMakeLists.txt文件位於項目目錄中,其中包含「include」和「src」文件夾。我開始聲明和定義頭文件中的所有函數,但是我很快意識到自己的錯誤,並且試圖將函數定義轉移到源文件中。但是,CLion在源文件中告訴我,沒有任何類的成員變量可以解析。克利翁:不能解析<member_variable_name>
以下是我的CMakeLists.txt:
cmake_minimum_required(VERSION 3.6)
project(Two_Link_Leg)
set(CCMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Werror -Wextra -pedantic -pedantic-errors")
include_directories("lib/Adafruit_PWMServoDriver")
include_directories(include)
set(SOURCE_FILES main.cpp src/ServoLink.cpp)
add_executable(Two_Link_Leg ${SOURCE_FILES})
ServoLink.h:
#ifndef TWO_LINK_LEG_SERVOLINK_H
#define TWO_LINK_LEG_SERVOLINK_H
#include <map>
#include "Adafruit_PWMServoDriver.h"
template <class size_t>
class ServoLink{
private:
//servo motor channel number on the PWM/Servo driver; [0, 15]
size_t mChannel;
//pointer to a map of the servo motor's angular position with its corresponding pulse width value
std::map<int, size_t>* mPWM;
//variable given by Adafruit
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
public:
ServoLink(size_t givenChannel, size_t givenPWM[]);
};
#include "../src/ServoLink.cpp"
#endif //TWO_LINK_LEG_SERVOLINK_H
ServoLink.cpp:
#include <stdexcept>
#include <map>
template<typename size_t size>
ServoLink<size_t>::ServoLink(size_t givenChannel, size_t givenPWM[]):mChannel(givenChannel){
mPWM= new std::map<int, size_t>;
for(size_t i= 0; i< size; i++){
mPWM->insert(std::make_pair(-90+((double)180*i/size), givenPWM[i]));
}
}
如果在我的模板語法的任何錯誤代碼或CMakeLists.txt錯誤,我將不勝感激任何幫助,以識別它們。謝謝。
你忘了在ServoLink.cpp中包含ServoLink.h'。這就是爲什麼你得到關於未知類型或混亂的錯誤。 – Tsyvarev