简体   繁体   中英

Can I include a cpp file in the main when there is a hpp?

For example: I have a class called A. And there is:

A.hpp
A.cpp
main.cpp

for my project

By default, I only need to include A.hpp in the main so I can compile it, either using IDE such as Xcode or using:

g++ main.cpp A.cpp -o xxxxx

But the submission system only allows me to use:

g++ main.cpp -o xxxx

I tried to include A.cpp in the main, but the IDE says: main file cannot be included recursively when building a preamble

Is there any solution? I want to keep my hpp and cpp separately.

Can I include a cpp file

In theory, any file can be included.

But as a convention, you should never include cpp files.

But the submission system only allows me to use:

 g++ main.cpp -o xxxx

If you cannot compile A.cpp then don't write such file at all. Write the definitions that you would have written in A.cpp into main.cpp instead. This achieves the same as including with a macro, but there won't be duplicate definitions in another cpp file.

You can #include any file you want. #include is automatic copy-paste. It looks in the file you tell it to include, and it reads whatever's in the file, and it pretends you wrote that in your original file. It doesn't care what's in the file, it just does that. You can include a .h file, a .hpp file, a .cpp file, a .txt file, a .py file, a .jpg file, or anything you want, as long as it's got valid C++ code in it.

Note that including a .cpp file is not the same as compiling it separately. And people expect that .cpp files are compiled separately, not included. To avoid confusing other programmers or the future version of yourself, you should rename the file to something else if you want to include it. You don't have to, but you should. If it's not a normal header file either (because you can't include it more than once), then you can make up some completely different extension, like .inc .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM