我有一个具有以下结构的项目:
Item.cpp
Item.h
main.cpp
Makefile
以下源代码在Item.h
文件中:
class Item {
public:
Item();
~Item();
};
以下源代码位于Item.cpp
文件中:
#include <iostream>
#include "Item.h"
Item::Item() {
std::cout << "Item created..." << std::endl;
}
Item::~Item() {
std::cout << "Item destroyed..." << std::endl;
}
以下源代码是main.cpp
文件的内容:
#include "Item.h"
#include <iostream>
int main() {
std::cout << "Initialize program..." << std::endl;
Item item_1();
std::cout << "Hello world!" << std::endl;
return 0;
}
最后,以下源代码是Makefile
文件:
CXX = g++
all: main item
$(CXX) -o sales.o main.o Item.o
main:
$(CXX) -c main.cpp
item:
$(CXX) -c Item.cpp
clean:
rm -rf *.o
当我运行make
命令,然后用命令./sales.o
运行编译后的代码时,我得到以下输出:
Initialize program...
Hello world!
为什么Item
类的构造函数方法的输出没有打印在控制台中?我在一些网页中发现,您可以分步骤编译源代码,然后在使用g++
时可以将其与-o
选项链接,但在这种情况下不起作用。如何一步一步地编译这些源代码,然后将其链接到Makefile
中?
我肯定你忽略了这个警告:
warning: empty parentheses were disambiguated as a function declaration [-Wvexing-parse]
#include "Item.h"
#include <iostream>
int main() {
std::cout << "Initialize program..." << std::endl;
Item item_1;
std::cout << "Hello world!" << std::endl;
return 0;
}
只要去掉括号就行了测试:https://godbolt.org/z/KrdrhvsrW