2016-01-16 4 views
6

सीएलओएन में कोड उत्पन्न करने के परिणामस्वरूप हमेशा हेडर फाइलों में लागू विधियों का परिणाम होता है, मुझे हमेशा सिखाया जाता है कि उन्हें .cpp फ़ाइलों में जाना चाहिए, कैसे क्या मैं उस व्यवहार को बदल सकता हूं और क्या यह भी संभव है?सीएलओएन डालने वाले कोड को कैसे बनाया जाए .... .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" 

दबाने के लिए ALT + सम्मिलित करें और getters/setters जनरेट करते समय test.hpp में जा रहा है या test.cpp केवल 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 

उत्तर

1

ठीक है, मैं तुम्हारे लिए एक वास्तविक समाधान है। मुझे वही समस्या थी जहां मैं alt + enter कर सकता था और मैं केवल प्रति विधि ऑटो उत्पन्न कर सकता था। आप alt + insert का उपयोग कर इसके आसपास काम कर सकते हैं। यह क्लियन में पीढ़ी के मेनू लाता है। यहां से generate definitions चुनें जो एक मेनू लाएगा जहां आप या तो सभी परिभाषाओं का चयन कर सकते हैं या चुनिंदा कुछ चुन सकते हैं जिन्हें आप वास्तव में उत्पन्न करना चाहते हैं।

क्लियन यह जानने के लिए पर्याप्त स्मार्ट है कि क्या आपके पास पहले से ही परिभाषा उत्पन्न हुई है, इसलिए आपको यहां डुप्लिकेट परिभाषाओं के बारे में चिंता करने की आवश्यकता नहीं है। मुझे पता चला है कि क्यूटी के साथ हालांकि कुछ वर्गों में मेटा ऑब्जेक्ट कंपाइलर ओवरराइड है जो यहां दिखाई देगा, इसलिए मैं सुनिश्चित करता हूं कि परिभाषाएं बनाते समय उनको चुनना न पड़े, लेकिन अधिकांश सामान्य उपयोग मामलों के लिए generate definitions सूची में प्रत्येक तत्व का चयन करना होगा चीजें जिन्हें आपने वास्तव में हेडर में परिभाषित किया है।

नोट करें कि आप अपने वर्ग के नाम पर भी राइट क्लिक कर सकते हैं और Generate... पर जा सकते हैं और आपको वही विकल्प दिए जाएंगे।

संपादित करें: ध्यान दें कि यदि आप वास्तव में मूल लेखक के व्यवहार चाहते हैं, तो आप "जगह में उत्पन्न" विकल्प का चयन कर सकते हैं एक बार आप उत्पन्न परिभाषाओं समारोह चयन स्क्रीन

+0

क्या यह सीपीपी फाइलों या एचपीपी में तरीकों को उत्पन्न करता है? मैं पहले से ही एएलटी इंसर्ट का उपयोग कर रहा हूं और यह एचपीपी –

+0

@QuentinSommer में उत्पन्न करता है निश्चित रूप से सीपीपी में विधियों को उत्पन्न करता है, इससे कोई फर्क नहीं पड़ता कि इसके गेटर्स और सेटर्स या फ़ंक्शन परिभाषाएं हैं या नहीं। आप कौन सा संस्करण उपयोग कर रहे हैं? – snb

+0

वैसे मुझे कहना होगा कि मैंने 1 साल से अधिक समय तक CLION का उपयोग नहीं किया है, मैं आपको भरोसा दूंगा और भविष्य के आगंतुकों के लिए आपके उत्तर को स्वीकार करूँगा! धन्यवाद –

3

Clion वास्तव में वाणी हेडर फ़ाइल में विधियां और उन्हें .cpp फ़ाइल में परिभाषित करती है बशर्ते यह 'जानता है' कि दोनों फाइलें संबंधित हैं। मैंने देखा कि नई स्रोत फाइलें बनाते समय, आपको सीडीके (सीएमके टूलबार> "सीएमके प्रोजेक्ट को फिर से लोड करें" आइकन) को आईडीई के लिए .cpp फ़ाइल को ध्यान में रखना होगा, खासकर यदि आप स्रोत फ़ाइलों को सूचीबद्ध करने के लिए file(GLOB xxx) का उपयोग करते हैं।

भी जांच करें कि:

  • .cpp फ़ाइल cmake के साथ बनाया गया एक द्विआधारी के लिए एक स्रोत के रूप में सूचीबद्ध है
  • यह ठीक से इससे संबंधित शीर्ष लेख शामिल हैं
  • स्रोत और हेडर फाइल एक ही है बेसनाम

नोट: यदि आवश्यक हो तो CLion विधि फ़ाइल में विधि कार्यान्वयन को स्थानांतरित करने का एक आसान तरीका प्रदान करता है। कर्सर को हेडर फ़ाइल में किसी विधि में रखें, Alt + Enter दबाएं और Move function definition to source file पर क्लिक करें।

+0

हाय करने के लिए मिलता है, मैं अपने समाधान नहीं मिल सकता है काम करने के लिए। मैंने अधिक जानकारी जोड़ने के लिए अपना प्रश्न संपादित कर दिया है –

1

मुझे एक ही समस्या थी जब मुझे पहली बार CLion का उपयोग करना शुरू किया गया था। मैं इरादा क्रिया मेनू (पीला ग्लोब) का उपयोग करके विधियों को कार्यान्वित करने के लिए परिभाषित करने में सक्षम था। मैं गलत हॉटकी का उपयोग करने की कोशिश कर उलझन में था।

वर्तमान संस्करण 2016/01/02 में:

  1. प्लेस विधि पर कर्सर।alt + enter
  2. ओएस एक्स डिफ़ॉल्ट::
  3. ओपन पास के मँडरा और दुनिया क्लिक करके Intention Actions मेनू, या हॉटकी दबाकर
    • विंडोज डिफ़ॉल्ट द्वारा option + enter
  4. प्रासंगिक कार्रवाई का चयन करें। स्रोत फ़ाइल में परिभाषा जोड़ने के लिए
    • Generate definition for function 'someFunction'
    • Create new function 'someFunction()' हेडर फ़ाइल में परिभाषा जोड़ने के लिए (जहां स्रोत में कार्यान्वयन पहले ही हो चुका है)।

enter image description here

+0

हाय, मैंने इसे करने का यह तरीका देखा है लेकिन यह बहुत धीमा है और आपको इसे उत्पन्न करने के लिए प्रत्येक विधि को मैन्युअल रूप से करना है, यह नहीं है कि मैं –

+0

की तलाश में हूं कोई चिंता नहीं। मुझे स्रोत में थोक पीढ़ी का कोई रास्ता नहीं मिला। – AXRS

संबंधित मुद्दे