헤더 파일이 "/ include"이고 소스 파일이 "/ src"인 ServoLink 템플릿 클래스가 있습니다. CMakeLists.txt 파일은 "include"및 "src"폴더가있는 프로젝트 디렉터리에 있습니다. 선언하고 헤더 파일의 모든 함수를 정의하기 시작했지만 실수를 빨리 깨달았고 함수 정의를 소스 파일로 넘겨 주려고합니다. 그러나 CLion은 소스 파일에서 클래스의 멤버 변수를 확인할 수 없음을 알려줍니다. 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'를 포함하는 것을 잊었습니다. 그래서 당신은 알 수없는 유형 또는 wharever에 관한 오류를 얻습니다. – Tsyvarev