如何从 C++ 中的类文件运行函数?

Posted

技术标签:

【中文标题】如何从 C++ 中的类文件运行函数?【英文标题】:How do I run a function from a class file in C++? 【发布时间】:2013-10-10 15:48:36 【问题描述】:

我正在尝试从类文件中运行一个函数,但它不起作用,并且我收到以下错误消息: 错误 LNK1120:1 个未解决的外部问题

错误 LNK2019:函数 _main 中引用的未解析的外部符号“public: void __thiscall NS::Class1::test(void)”(?test@Class1@NS@@QAEXXZ)

//Main.cpp

#include<iostream>
#include<string>
#include<Windows.h>
#include "Class1.h"

int main()
    NS::Class1 E;
    E.test();
    return 0;
;

//Class1.cpp

#include <Windows.h>
#include <string>
namespace NS
class Class1
        Class1()
            OutputDebugString(L"Created.");
        

        void test()
            OutputDebugString(L"Hello World");
        
    ;

//Class1.h

#ifndef _Class1_H_
#define _Class1_H_
namespace NS
    class Class1
        public:
            void test();
        ;

#endif

【问题讨论】:

你是如何编译和链接你的.cpp文件的? 【参考方案1】:

在您的源文件中,您正在重新定义类,而不是定义其成员函数。这将给出未定义的行为,因为您只能定义一次类。源文件应该看起来更像:

#include "Class1.h"
#include <Windows.h>

NS::Class1::Class1()
    OutputDebugString(L"Created.");


void NS::Class1::test()
    OutputDebugString(L"Hello World");

您还需要修改标头中的类定义,因为它没有声明构造函数。

另外,请确保您的项目正在编译和链接两个源文件。

【讨论】:

【参考方案2】:

您的头文件包含包含保护的保留 ID,并且缺少构造函数的声明。它应该是这样的:

#ifndef CLASS1_H
#define CLASS1_H

namespace NS 

class Class1

public:
    Class1();
    void test();
;


#endif

类的定义不应该包含class声明,它应该是include它,并且应该看起来更像这样:

#include <Windows.h>

#include "Class1.h"

namespace NS 

Class1::Class1()

    OutputDebugString(L"Created.");


void Class1::test()

    OutputDebugString(L"Hello World");



【讨论】:

【参考方案3】:

我认为您的 .cpp 文件可能会导致问题。由于您已经使用类成员声明在头文件中创建了类定义,因此只需在 Class1.cpp 文件中导入 Class1.h 头文件并确定成员函数的范围,然后定义它们的行为。

所以不妨试试:

#include <Class1.h>

NS::Class1::Class1()//constructor

void NS::Class1::test(std::cout << "hi")

【讨论】:

#include 到底是什么?你能整理一下答案的格式吗? 对不起,我的意思是 #include "Class1.h" 作为上述检查的答案。检查的答案非常好和正确。比我的更精致:)

以上是关于如何从 C++ 中的类文件运行函数?的主要内容,如果未能解决你的问题,请参考以下文章

从向量中保存的类对象输出类函数

何时为 C++ 中的类的成员函数分配内存空间?

如何从 Jar 运行一个不在其 Manifest 文件中的 Main-Class 的类

如何从命令行运行 WAR 中的类?

如何从 C++ 文件运行答案集编程文件?

在 C++ 中的 main() 函数中声明的类