C++ ';对Class::method()和#x27的未定义引用;

C++ ';对Class::method()和#x27的未定义引用;,c++,class,methods,header,instance,C++,Class,Methods,Header,Instance,最近我一直在学习如何在类中创建方法,这样我只需编写一次方法,对于我实例化的每个类,我可以调用一个方法,它将只对调用它的对象的变量起作用,我知道在只使用main.cpp而不使用标题时如何做到这一点,但是我对在使用类标题和cpp时应该如何编写感到困惑。 我有一个类似于我想要实现的代码示例: #include <iostream> using namespace::std; class Object { public: int stuff; void manageStu

最近我一直在学习如何在类中创建方法,这样我只需编写一次方法,对于我实例化的每个类,我可以调用一个方法,它将只对调用它的对象的变量起作用,我知道在只使用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";
  }
}  
#包括
使用namespace::std;
类对象
{
公众:
智力材料;
void manageStuff();
对象();
};
void对象::manageStuff()
{
stuff++;
}
对象::对象():填充(0){}
对象1、对象2;
int main(){
对于(int i=0;i<10;i++)
{
object1.manageStuff();
object2.manageStuff();

cout我建议去掉
TestFunctions.h
,并添加
Test::count()的实现
Test.cpp
。目前,
TestFunctions.h
头未包含在任何位置,因此您无法从main访问定义。

我建议去掉
TestFunctions.h
,并添加
Test::count()的实现
Test.cpp
。目前,
TestFunctions.h
头文件未包含在任何位置,因此您无法从main访问该定义。

您在头文件(TestFunctions.h)中定义(即实现)了Test::count(),但您从未将其包含在任何位置,因此那里的代码不会被编译

您应该将其更改为.cpp文件中,编译并将其与其他源文件链接。没有理由不将其放置在Test.cpp中。

您在头文件(TestFunctions.h)中定义(即实现)了Test::count(),但您从未将其包含在任何位置,因此那里的代码未被编译


您应该将其更改为.cpp文件,编译并与其他源文件链接。没有理由不将其放置在Test.cpp中。

将TestFunctions.h重命名为TestFunctions.cpp,使其以与main.cpp相同的方式编译并链接


或者,在某处包含TestFunctions.h,例如main.cpp

将TestFunctions.h重命名为TestFunctions.cpp,使其以与main.cpp相同的方式编译并链接


或者,将TestFunctions.h包含在某个地方,例如main.cpp

代码看起来不错。错误可能在于您试图将其链接成可执行文件的方式。这个问题过于冗长,我认为这是一个次要问题(而且有数百个重复项)。请将其浓缩成一个小的、自包含的示例。不要告诉我们什么是有效的,只需告诉我们问题是什么,并给问题一个更相关的标题。您的变量
test
从未在main.cpp中初始化。代码看起来不错。错误可能在于您试图将其链接到可执行文件的方式。这个问题远未解决o对于我认为是次要的一点(而且有数百个副本)进行详细说明。请将其压缩成一个小的、自包含的示例。不要告诉我们什么是有效的,只需告诉我们问题是什么,并给问题一个更相关的标题。您的变量
test
从未在main.cpp中初始化。谢谢!我将其放在test.cpp中,但现在我遇到了一个新错误:test::counter++\\“错误:类型没有后增量运算符。”"有什么想法吗?我在网上发现了各种各样的结果,有些人说这与使用模板而不是类有关,而Others说使用另一种编译器(如VC++)会更好help@TotalJargon问题是,
Test::counter
是一个函数,不能递增。您没有任何要递增的数据。不清楚您在尝试什么不知道该怎么做,但代码看起来肯定是错的。这超出了这个问题的范围:)count在类测试中是void类型,counter是int类型,仍然不知道为什么这不起作用?@TotalJargon,因为`int counter();`声明一个返回int的函数。如果需要int数据成员,则需要`int counter;
。并且应该在构造函数中将其初始化为
0`。例如:Test::Test(){//ctor counter(0);}?谢谢!我将其放在Test.cpp中,但现在我得到一个新错误:Test::counter++\\“错误:类型没有后增量运算符。”"有什么想法吗?我在网上发现了各种各样的结果,有些人说这与使用模板而不是类有关,而Others说使用另一种编译器(如VC++)会更好help@TotalJargon问题是,
Test::counter
是一个函数,不能递增。您没有任何要递增的数据。不清楚您在尝试什么不知道该怎么做,但代码看起来肯定是错的。这超出了这个问题的范围:)count在类测试中是void类型,counter是int类型,仍然不知道为什么这不起作用?@TotalJargon,因为`int counter();`声明一个返回int的函数。如果需要int数据成员,则需要`int counter;
。并且应该在构造函数中将其初始化为
0`。例如:Test::Test(){//ctor counter(0);}?
#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;
}  
#include <iostream>
#include "Test.h"

using namespace std;

Test::Test()
{
    //ctor
}

Test::~Test()
{
    //dtor
}  
#include <iostream>

#ifndef TEST_H
#define TEST_H


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

#endif // TEST_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