1

最近、クラス内でメソッドを作成する方法を学びました。メソッドを1回記述するだけで、インスタンス化するクラスごとに1つのメソッドを呼び出すことができ、それを呼び出したオブジェクトの変数でのみ機能します。 、main.cppのみを使用し、ヘッダーを使用しない場合にこれを行う方法を知っていますが、クラスヘッダーとcppを使用する場合にこれをどのように記述するかについて混乱しています。
達成したいものに似たコードのサンプルがあります。

#include <iostream>

using namespace::std;

class Object
{
public:
    int stuff;
    void manageStuff();
    Object();
};
void Object::manageStuff()
{
    stuff++;
}

Object::Object() : stuff(0) {}

Object object1, object2;

int main() {
  for (int i = 0; i < 10; i++)
  {
      object1.manageStuff();
      object2.manageStuff();
      cout << object1.stuff << "\n";
      cout << object2.stuff << "\n";
  }
}  

これは正常に機能し、Objectの2つのインスタンスと、インスタンスごとに独立して機能するメソッドを持つことができます。これが現在のプロジェクトです
。main.cpp:

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

using namespace std;

int main()
{

    Test test;

    for (int i = 0; i < 10; i++)
    {
        test.count(); // Here's my error "undefined reference to Test::count"
    }

    return 0;
}  

Test.cpp

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

using namespace std;

Test::Test()
{
    //ctor
}

Test::~Test()
{
    //dtor
}  

Test.h

#include <iostream>

#ifndef TEST_H
#define TEST_H


class Test
{
    public:
        Test();
        virtual ~Test();
        void count();
        int counter();
};

#endif // TEST_H  

そして最後にTestFunctions.h

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

#ifndef TESTFUNCTIONS_H_INCLUDED
#define TESTFUNCTIONS_H_INCLUDED

void Test::count()
{
    Test::counter++;
    std::cout << Test::counter;
}

#endif // TESTFUNCTIONS_H_INCLUDED  

経験豊富なプログラマーにとっては明らかに間違っていることがあると確信しており、少し太く見えようとしていますが、助けていただければ幸い
です。ありがとうございます。

4

3 に答える 3

4

を取り除きTestFunctions.h、 の実装を に追加することをお勧めTest::count()Test.cppます。現在、TestFunctions.hヘッダーはどこにも含まれていないため、main から定義にアクセスすることはできません。

于 2012-07-31T10:18:45.500 に答える
2

ヘッダー ファイル (TestFunctions.h) で Test::count() を定義 (つまり実装) しましたが、どこにも含めなかったため、そこにあるコードはコンパイルされません。

これを .cpp ファイルに変更し、コンパイルして、他のソース ファイルとリンクする必要があります。Test.cpp に配置しない理由はありません。

于 2012-07-31T10:20:29.257 に答える
0

TestFunctions.h の名前を TestFunctions.cpp に変更し、main.cpp と同じ方法でコンパイルしてリンクします。

または、TestFunctions.h をどこかにインクルードします (例: main.cpp)。

于 2012-07-31T10:22:17.123 に答える