1

class_one.h

#ifndef CLASS_ONE
#define CLASS_ONE
#include <string>

namespace ones{

    typedef enum{BLACK, WHITE, RED} b_color;

    typedef char b_letter;
    const b_letter letters[4] = {'A', 'B', 'C', 'D'};

    class one{
        b_color color;
        b_letter letter;
        public:
        one(b_color, b_letter);
        std::string combo();
        b_color getColor();
        b_letter getLetter();
    };
}
#endif

このヘッダーファイルがある場合、.cppファイルを作成するにはどうすればよいですか。次に、このクラスを別のファイルmain.cppでインスタンス化するにはどうすればよいですか。私はこのようなことを考えるでしょう:

class_one.cpp

#include <iostream>
#include "class_one.h"

using namespace ones;

class one
{
    b_color color;
    b_letter letter;
public:

    one(b_color c, b_letter l) //Not sure about this one..
    {
        color = c;
        letter = l;
    }
    std::string combo()
    {
        return "blahblah temporary. letter: " + letter; //not finished
    }
    b_color getColor()
    {
        return color;
    }
    b_letter getLetter()
    {
        return letter;
    }
};

そしてそれをインスタンス化するために、私は次のようなことをします:

main.cpp

#include "class_one.h"

int main()
{
    ones::one test(ones::BLACK, ones::letters[0]);
    //cout<<test.name()<<endl;
    return 0;
}

すべてがファイルのより大きなクラスターから抽出されますが、これは私の質問の本質です。ヘッダーファイルは正しいはずですが、そのコンストラクターではなく、「one」クラスをインスタンス化する方法がわかりません。.cppで定義したコンストラクターが間違っていると思います。私はJavaに慣れているので、コンストラクターでさえも、ヘッダーファイルにあるようなコンストラクターを見たことがありません。method(int, int)私には、これまでのように見えmethod(int a, int b) ます。これを実行すると、次のエラーが発生します。

main.obj : error LNK2019: unresolved external symbol "public: __thiscall ones::one::one(enum ones::b_color, char)" (??0one@ones@@QAE@W4b_color@1@D@Z) referenced in function _main
<path>/project.exe : fatal error LNK1120: 1 unresolved externals

私がここに持っている信じられないほど愚かな命名について申し訳ありませんが、それは目的のために理にかなっています。私が今これのほとんどを手で書いたので、質問コードのいくつかのタイプミスかもしれません。助けていただければ幸いです。

4

1 に答える 1

2

cppファイルは次のようになります。

#include "class_one.h"

ones::one::one(ones::one::b_color c, ones::one::b_color l)
{
    //code here
}

std::string ones::one::combo()
{
   // code here
}

// additional functions...

等々。クラスブロックを使用してクラスを再定義するのではなく、ここで示したように個々の関数定義を指定するだけです。関数定義の形式は次のようになります。

[return type] [namespace]::[class]::[function]([parameters])
{
    // code here
}

インスタンス化が得意なようです。また、メンバー変数を再宣言する必要はありません。

于 2013-02-19T01:49:38.490 に答える