私はクラスChild
とクラスHuman
を持っています。Human
には、仮想関数としてChild
に宣言されているすべての関数があります。クラスChild
はHuman
クラスから継承しています。C++でインターフェイスクラスの実装を使用する正しい方法は何ですか?
Child
の実装を非表示にするインターフェイスファイルとしてHuman
を使用します。
私はコンストラクタを実際にセットアップしませんでしたが、基本設定を初期化するinit()
関数を設定しました。
インターフェイスファイルを使用してChild
機能を使用するにはどうすればよいでしょうか?
私は
Human *John = new Child();
を試してみましたが、私は次のエラーを得ました。
main.cpp:7: error: expected type-specifier before ‘Child’
main.cpp:7: error: cannot convert ‘int*’ to ‘Human*’ in initialization
main.cpp:7: error: expected ‘,’ or ‘;’ before ‘Child
int*
がどちらから来たのか分かりません。宣言された関数のどれもint *を返しません。
編集
main.cppに
#include <stdlib.h>
#include <stdio.h>
#include "Human.h"
using namespace std;
int main(){
Human *John = new Child();
return 0;
}
human.h
#ifndef __HUMAN_h__
#define __HUMAN_h__
class Human
{
public:
virtual void Init() = 0;
virtual void Cleanup() = 0;
};
#endif
Child.h
#ifndef __CHILD_h__
#define __CHILD_h__
#include "Human.h"
class Child : public Human
{
public:
void Init();
void Cleanup();
};
#endif
Child.cpp
#include "Child.h"
void Child::Init()
{
}
void Child::Cleanup()
{
}
あなたのcpp
ファイルに#include "Child.h"
に必要なMakefileの
CC = g++
INC = -I.
FLAGS = -W -Wall
LINKOPTS = -g
all: program
program: main.o Child.o
$(CC) -Wall -o program main.o Child.o
main.o: main.cpp Human.h
$(CC) -Wall -c main.cpp Human.h
Child.o: Child.cpp Child.h
$(CC) -Wall -c Child.cpp Child.h
Child.h: Human.h
clean:
rm -rf program
コードをさらに投稿してください。また、コードが表示されていないので推測するだけで、 'Human'クラス定義の末尾にセミコロン('; ')を追加してください; – phooji
[here](http:// sscce .org /)。 –
私は上記のコードを編集し掲示しました – user482594