将一些类方法放在不同的.cc文件中

时间:2013-04-23 21:52:41

标签: c++

我在.h和.cc文件中包含以下格式的代码:

myClass.h:

#ifndef MYCLASS_H
#define MYCLASS_H
class myClass
{
public:
    myClass(); // constructor
    ~myClass(); // destructor

    void classMethod1 ();
    void classMethod2 ();

    int memberVarable1;
    int memberVariable2;
};
#endif

和myClass.cc:

#include "myClass.h"
myClass::myClass(){
 // stuff
}

myClass::~myClass(){
 // stuff
}

void myClass::classMethod1 (){
 // stuff
}

void myClass::classMethod2 (){
 // stuff
}

所有这一切都很好。然而,我的项目变得非常庞大,我即将添加一组新功能。我想把一些新方法放在另一个.cc文件中,而不是堵塞myClass.h和myClass.cc。我似乎无法让它工作。

myClass.h:

#ifndef MYCLASS_H
#define MYCLASS_H

#include "secondFile.h"

class myClass
    {
    public:
        myClass(); // constructor
        ~myClass(); // destructor

        void classMethod1 ();
        void classMethod2 ();

        int memberVarable1;
        int memberVariable2;
    };
#endif

和myClass.cc:

#include "myClass.h"
#include "secondFile.h"
myClass::myClass(){
 // stuff
}

myClass::~myClass(){
 // stuff
}

void myClass::classMethod1 (){
 // stuff
}

void myClass::classMethod2 (){
 // stuff
}

secondFile.h:

#ifndef SECONDFILE_H
#define SECONDFILE_H

void someNewMethod();

#endif 

secondFile.cc

#include "secondFile.h"
void someNewMethod(){
 // can't see classMethod1()
}

3 个答案:

答案 0 :(得分:3)

在每个源文件中,您需要包含声明要使用的函数等的每个头文件。

因此,在您的情况下,您似乎希望secondFile.cc包含

#include "myClass.h"
#include "secondFile.h"
void someNewMethod(){
 // can't see classMethod1()
}
不过,你在做什么在实践中很常见。有时,我甚至比你的建议更进一步,并在多个源文件中实现单个类的各种方法。对于大型复杂的类,这有助于加快开发周期,因为如果我只进行了一些小改动,我只需要重新编译一部分类实现。例如:

myclass.h

#pragma once

class MyClass
{
  ...
  void complicatedMethod0();
  void complicatedMethod1();
  ...
};

myclass_impl0.cpp

#include "myclass.h"

void MyClass::complicatedMethod0()
{
  ...
}

myclass_impl1.cpp

#include "myclass.h"

void MyCLass::complicatedMethod1()
{
  ...
}

答案 1 :(得分:1)

如果您打算方法添加到myClass,则不能这样做 - 类方法必须包含在一个定义中。

您可以通过继承扩展 myClass

secondFile.h:

#ifndef SECONDFILE_H
#define SECONDFILE_H

#include "myClass.h"

class mySecondClass : public myClass
{
    public: 
        void someNewMethod();
}
#endif 

secondFile.cc

#include "secondFile.h"
void mySecondClass::someNewMethod(){
     this.classMethod1();
}

答案 2 :(得分:0)

#include "secondFile.h"
#include "myClass.h" 
//if you want the class methods, 
//you need to tell the compiler where to look
void someNewMethod(){
 // can't see classMethod1()
}

您似乎忘记了包含" myClass.h"。

相关问题