【发布时间】:2017-03-18 04:44:24
【问题描述】:
我有一个模板类 ServoLink,其头文件在“/include”中,源文件在“/src”中。 CMakeLists.txt 文件位于项目目录中,其中包含“include”和“src”文件夹。我开始在头文件中声明和定义所有函数,但我很快意识到我的错误,我试图将函数定义转移到源文件中。但是,CLion 在源文件中告诉我,该类的所有成员变量都无法解析。
以下是我的 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.h包含在ServoLink.cpp中。这就是为什么您会收到有关未知类型或 wharever 的错误。