Visual编写一个c++程序,使用带有头文件的CPP文件
visual writing a c++ program using a cpp file with header file
正在为我的大学项目写一个基本的c++程序
我声明了一个名为TestClass
的示例类,并将其放在header files
文件夹下的testclass.h
文件中。
class TestClass
{
private:
int an;
public:
TestClass(void);
int a[];
void print();
void compute();
void get();
~TestClass(void);
};
然后在上面的类implement
中,我在Source Files
文件夹中创建了一个新文件,然后编写了这段代码。
#include <iostream>
#include <conio.h>
#include "TestClass.h"
TestClass:: vinayak(void)
{
}
void TestClass:: print()
{
}
void TestClass:: compute()
{
}
void TestClass:: get()
{
}
TestClass:: ~TestClass(void)
{
}
然后我创建了一个名为Source.cpp
的新文件,然后编写了这段代码。
#include "TestClass.h"
#include "TestClass.cpp"
void main()
{
TestClass TObject = TestClass();
TObject.get();
}
在这里我得到如下错误:
public: void __thiscall TestClass::compute(void)" already defined in Source.obj
知道为什么吗?
编辑:基于@Marco的评论,我能够编译程序。此外,我必须删除header file
中的constructor
和destructor
声明。
这使得程序可以正常工作:)
每次写
#include "something"
它就像复制粘贴那个"某物"文件的内容到那个特定的位置。
你正在编译一个"TestClass
"翻译单元和一个"Source
"翻译单元,它们都包含你的compute
方法的定义。
删除Source.cpp:
中的cpp include#include "TestClass.h"
// #include "TestClass.cpp" <- Remove this
void main()
{
TestClass TObject = TestClass();
TObject.get();
}
和Source
翻译单元将知道TestClass
有一个compute
方法,但是ODR(读取它)将满足。
你需要阅读的摘要:
- 声明/定义的区别
- 什么是TU -翻译单位 编译与链接的区别
- 什么是ODR,为什么它很重要
-
#include
指令做什么
头文件必须防止多个包含。
在头文件的顶部添加#pragma once
,或者将其更改为:
#ifndef TEST_CLASS_INCLUDE
#define TEST_CLASS_INCLUDE
class TestClass
{
...
};
#endif
同样,你不应该包含。cpp文件。只需要从Source.cpp中包含include TestClass.h,并确保TestClass.cpp已被编译,TestClass.cpp已被编译。
让你需要仔细阅读链接
这条线#include "TestClass.cpp"
不需要
包含TestClass.cpp
,您只需要包含头文件
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 为什么我的主文件.cpp不打印头文件中的任何内容
- 生成文件错误 - 找不到文件 - *.cpp
- 如何在文件.cpp gtkmm中声明小部件
- 没有实现文件(.cpp)的派生类
- 如何使用"CMakeLists.txt"中的add_library将整个文件(.cpp,.h等)包含在目录中
- 如何在Linux / Windows操作系统上使用文件*.cpp一步编译下面的代码
- 关于 Linux .so 文件无法链接到主文件.cpp文件
- 文件.cpp从Windows到Linux
- Ubuntu C++ 编译器错误: g++: 错误: 文件.cpp: 没有这样的文件或目录
- 如何将文件.cpp编译为本机编译
- 使用模板类时,似乎无法包含除 main 以外的任何 cpp 文件.cpp
- 无法编译C++文件.cpp。C++98模式
- 为什么C++头文件不需要包含实现文件 (.cpp)
- 如何访问位于独立文件(.cpp)中的非成员函数
- 如何在Visual Studio Code中通过键盘快捷键切换头文件/cpp文件
- 如何将数据从stringstream写入文件(CPP)
- 为什么filestream不把空白写入文件cpp ?