1

単一の .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
}

これはすべて正常に機能しています。しかし、私のプロジェクトはかなり大きくなっており、一連の新しい機能を追加しようとしています。myClass.h と myClass.cc を詰まらせる代わりに、いくつかの新しいメソッドを別の .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 

セカンドファイル.cc

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

3 に答える 3

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()
{
  ...
}
于 2013-04-23T21:55:54.663 に答える
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」を含めるのを忘れているようです。

于 2013-04-23T21:56:43.440 に答える