如何从 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++ 中的类文件运行函数?的主要内容,如果未能解决你的问题,请参考以下文章