Cygwin g++和声明不声明任何内容
Cygwin g++ and declaration does not declare anything
首先,我不是一个热衷于C/C++的用户,但我有一个项目是用两种语言编写的。此外,它基于一些Unix类型(所以VS不是一个选项,是吗?)我目前使用的是Windows 7 x32,我决定看看Cygwin(g++编译器)。但在推进整个项目之前,我想在不那么困难的情况下尝试一下。
所以我有
main.cpp
#include <iostream>
#include "h/math.h"
int main()
{
Math math; // just declare the Math variable, nothing else
std::cin.get();
return 0;
}
math.h
#ifndef math
#define math
class Math
{
public:
int Addition(int, int);
int Multiplication(int, int);
};
#endif
math.cpp
#include "math.h"
int Math::Addition(int x, int y)
{
return x + y;
}
int Math::Multiplication(int x, int y)
{
return x * y;
}
然后我打开"…\Cygwin\Cygwin.bat",设置文件的路径(cd C:\Proj),并尝试使用以下命令进行编译:
$g++main.cpp
我得到的是一个错误:main.cpp:错误:声明没有声明任何东西
怎么了?据我所知,它不喜欢我的"数学数学"行,但在我的VS2010中尝试过,并没有出现这样的错误。这是由于g++编译器造成的吗?它不支持"类"声明吗?我应该更改什么来运行该代码?
谢谢!
您在标头中#define math
。因此,预处理器看到Math math
,然后说"哦,等等,#define math
,所以Math
是正确的替换"。因此,当编译器给出声明时,它会看到Math ;
。这显然不是犹太洁食。宏应该总是全大写,尤其是头保护通常采用非常特殊的形式,比如HEADER_GUARD_MATH_H
或类似的形式。
编译math.cpp时也可能会遇到问题。您的编译器可能会与混淆
#include "math.h"
其可以指向CCD_ 7C报头。
此外,这对#define math
来说真的很糟糕。您永远不应该#define
一个名称如此简单的宏。为什么不这样做的最好例子是你的代码:
Math math;
但是CCD_ 10令牌的每次出现都被预处理为该宏的内容:
Math ;
对于标头gurad,我通常推荐模式FILENAME_EXT_INCLUDED_YYYYMMDD
,在您的情况下是
#ifndef MATH_H_INCLUDED_20120710
#define MATH_H_INCLUDED_20120710
...
#endif
像MATH_H
这样的简单模式可能已经太简单了,因为您将来可能会介绍其他math.h
(自从我使用带有日期的模式以来,这种情况在过去不止一次发生在我身上)。
您必须在命令行中包含所有源文件,例如g++ main.cpp math.cpp
。
- C++ 17 个友元函数声明和内联命名空间
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- 在 C++ 中声明类内的全局成员
- C++ 如何在外部类中声明的内部类中使用变量
- 是否有任何内置的哈希图函数来处理 c++ 中的值输入?
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- 将静态全局变量声明为内联有什么意义吗?
- 重新声明C++内置类型"wchar_t"Windows 10 过剩 CPP
- C++ 中是否有任何内置阶乘函数?
- 工会成员中的模板 - 声明没有声明任何内容
- 是否有任何内置函数可以告诉编译器分支是否可预测
- 海湾合作委员会警告"没有声明任何东西
- 类 'MainWindow' 中未声明任何成员函数
- 当我们不能声明函数内联(GCC 编译器)时?
- 外部模板:声明不声明任何内容
- 如何在声明时间内启动成员对象
- 我需要在C /C#中使用图形.我可以使用任何内置的C /C#库
- 是否有任何内置类可以处理C 中的大整数值
- 编译时类中未声明任何成员函数时出错
- 定义或重新声明函数内不允许'GetInstance'