在CLion中生成代码总是会导致在头文件中实现这些方法,我总是被告知他们应该使用.cpp文件,我怎样才能改变这种行为甚至可能呢?
示例:
在包含main.cpp和测试类(test.hpp和test.cpp)的项目中。
CMake文件如下:
cmake_minimum_required(VERSION 3.3)
project(testClion)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp
test.cpp
test.hpp)
add_executable(testClion ${SOURCE_FILES})
(请注意,这是clion提供的默认文件,我没有更改任何内容)
test.hpp
#ifndef TESTCLION_TEST_HPP
#define TESTCLION_TEST_HPP
class test
{
protected:
int test;
};
#endif //TESTCLION_TEST_HPP
TEST.CPP
#include "test.hpp"
在test.hpp或test.cpp中按ALT + INSERT并生成getter / setter只会更改test.hpp:
test.hpp
#ifndef TESTCLION_TEST_HPP
#define TESTCLION_TEST_HPP
class test
{
public:
int getTest() const
{
return test;
}
void setTest(int test)
{
test::test = test;
}
protected:
int test;
};
#endif //TESTCLION_TEST_HPP
答案 0 :(得分:3)
CLion实际上在头文件中声明方法并在.cpp文件中定义它们,只要它知道'这两个文件都是相关的。我注意到在创建新的源文件时,您必须重新加载cmake(CMake工具栏>"重新加载CMake项目"图标)以便IDE考虑.cpp文件,特别是如果您使用{{1列出源文件。
请检查:
注意:如果需要,CLion提供了一种将方法实现移动到源文件的简便方法。将光标放在标题文件中的方法中,按file(GLOB xxx)
并单击Alt + Enter
。
答案 1 :(得分:2)
好的,我有一个实际的解决方案。我遇到同样的问题alt + enter
,我只能自动生成每个方法。您可以使用alt + insert
解决此问题。这将打开Clion中的生成菜单。从这里选择generate definitions
将显示一个菜单,您可以在其中选择所有定义或选择您想要生成的少数几个。
Clion足够聪明,知道您是否已经生成了一个定义,因此您不必担心此处的重复定义。我发现使用QT然而某些类具有将在此处显示的元对象编译器覆盖,因此我确保在创建定义时不选择那些,但对于大多数正常用例,选择generate definitions
中的每个元素list只会生成您在标题中实际定义的内容。
请注意,您也可以右键点击您的班级名称,然后转到Generate...
,您将获得相同的选项。
编辑:请注意,如果您确实需要原作者的行为,则可以在进入生成定义功能选择屏幕后选择“生成到位”选项
答案 2 :(得分:1)
我第一次使用CLion时遇到了同样的问题。我能够通过使用“意图操作”菜单(黄色地球)来定义实现方法的位置。我试图使用错误的热键而感到困惑。
目前在2016.1.2版本中: