如何使CLion在.cpp文件中插入生成的代码....

时间:2016-01-16 11:44:27

标签: c++ clion

在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

3 个答案:

答案 0 :(得分:3)

CLion实际上在头文件中声明方法并在.cpp文件中定义它们,只要它知道'这两个文件都是相关的。我注意到在创建新的源文件时,您必须重新加载cmake(CMake工具栏>"重新加载CMake项目"图标)以便IDE考虑.cpp文件,特别是如果您使用{{1列出源文件。

请检查:

  • .cpp文件被列为使用cmake构建的二进制文件的源
  • 它正确包含其相关标题
  • 源文件和头文件具有相同的基本名称

注意:如果需要,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版本中:

  1. 将光标放在方法上。
  2. 通过悬停在附近并单击地球仪或按热键打开Intention Actions菜单
    • Windows默认值:alt + enter
    • OS X默认值:option + enter
  3. 选择相关操作。
    • Generate definition for function 'someFunction'在源文件中添加定义。
    • Create new function 'someFunction()'将定义添加到头文件中(其中已在源中完成实现)。
  4. enter image description here