我正在为正在学习的一个类编写代码。我不能在不清零我的项目分数的情况下发布所有代码,但这是我的驱动程序的缩写代码:
#pragma once
#include <iostream>
#include <fstream>
#include <string>
#include "Stack.h"
using namespace std;
namespace jack
{
int high(char a)
{
// My Code
};
bool isSameOrHigher(char top, char cur)
{
// My Code
};
int main()
{
// My Code
};
};
由于某些原因,当我编译这段代码时,我无法弄清楚,我得到了以下错误:
链接:致命错误LNK1561:必须定义入口点
现在,据我所知,只有当我没有主函数时,才会发生这个错误,你可以看到我确实有。我曾尝试将代码从这个文件复制到另一个项目中,我曾尝试单独将我的主函数分离到另一份cpp文件中(这导致了更多错误,但没有修复入口点错误),我还尝试重新安装Visual C++express并完全从头开始。我和我的老师在main()之前检查了这个文件中的所有代码(以及我编写并包含的Stack.h文件中的全部代码),没有遗漏任何括号、分号或任何其他标点符号。我甚至不知道还能尝试什么。想法?
您需要将main
移动到任何命名空间之外。
对于任何关心标准内容的人(§3.6.1/1):
程序应包含一个名为
main
的全局函数,该函数是程序的指定启动。
编辑:对于那些还想知道"全局"含义的人(C++03中的§3.3.5/3,C++11中几乎相同措辞的§3.3.6/3):
翻译单元的最外层声明性区域也是一个名称空间,称为全局名称空间。在全局命名空间中声明的名称具有全局命名空间作用域(也称为全球作用域)。[…]具有全局命名空间作用域的名称称为全局。
将main
从名称空间中取出
将main
函数移到命名空间之外。
将main
函数从命名空间中取出。从技术上讲,您的main
实际上是jack::main
,而它在名称空间内。
您应该只在global namespace
中定义main()
,而不是在任何其他namespace
s中定义。