У меня есть рабочий класс, как пример:
// MyClass.h
class MyClass {
public:
explicit MyClass(unsigned char enablePin);
void enable(bool enable);
private:
const unsigned char mEnabePin;
};
// MyClass.cpp
#include "MyClass.h"#include <gpio.h>
MyClass::MyClass(unsigned char enablePin)
: mEnabePin(enablePin) {
}
void MyClass::enable(bool enable) {
gpio_set(mEnabePin, static_cast<unsigned char>(enable ? 0 : 1));
}
Тогда у меня в другом файле extern
объявление одного экземпляра этого класса:
// main.h
extern MyClass myClass;
и, конечно, фактическое определение в одном .cpp
файл:
// main.cpp
#include "main.h"#include <Board.h>
MyClass myClass(Board::Pins::MYCLASS_ENABLE_PIN);
int main() {
// ...
myClass.enable(true);
}
Компилируется без предупреждений с -Wall -Wextra
и тоже хорошо работает.
Однако кажется, что CLion 2017.2.1 не получает должным образом extern
декларация и всегда жалуется на:
и предлагает мне эти намеренные действия:
несмотря на то, что он распознает определение объявления, так как показывает красно-зеленые стрелки как Перейти к определению / объявлению ярлык.
Я мог бы отключить этот тип проверок, но они относятся к очень полезному набору проверок типов, то есть Несоответствие количества параметров функции которую я не хочу выключать.
Кто-нибудь сталкивался с той же проблемой и нашел аккуратный обходной путь?
Задача ещё не решена.
Других решений пока нет …