我已经使用 C/C++ 大约 7 个月了,目前正在尝试编写一小组线性代数程序。现在我正在尝试测试我的向量类,但收到错误消息:
In file included from /usr/include/machine/_types.h:34,
from /usr/include/sys/_types.h:33,
from /usr/include/_types.h:27,
from /usr/include/unistd.h:71,
from /usr/include/c++/4.2.1/i686-apple-darwin10/x86_64/bits/os_defines.h:61,
from /usr/include/c++/4.2.1/i686-apple-darwin10/x86_64/bits/c++config.h:41,
from /usr/include/c++/4.2.1/cstdlib:50,
from linalgtest.cpp:8:
/usr/include/i386/_types.h:37: error: two or more data types in declaration of ‘__int8_t’
在 /usr/include/c++/4.2.1/stdexcept:43 包含的文件中,
来自向量.cpp:8:
/usr/include/c++/4.2.1/exception:40: 错误:此处不允许使用“#pragma”
shell returned 1
我正在运行 Mac OS X 10.6.5,并检查了我的/usr/include/i386_types.h
针对在以下位置找到的文件进行归档http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/i386/_types.h http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/i386/_types.h。无论价值如何,它们看起来都是一样的。
这是我的测试程序文件的内容
#include "linalg.h" // L7
#include <cstdlib> // L8: the offending line
#include <cmath> // L9
using namespace std;
double drand(double d) { return d*((double)rand()/RAND_MAX); }
int main(void) {
int n = 10;
double comps[10];
for (int i = 0; i < n; ++i)
comps[i] = drand(10.0);
vector *v1 = new vector(n);
vector *v2 = new vector(n, comps);
v1->print();
v2->print();
return 0;
}
_types.h 中的违规行 (37) 是:
#ifdef __GNUC__
typedef __signed char __int8_t; // L37
#else /* !__GNUC__ */
typedef char __int8_t;
来自例外 (40):
#ifndef __EXCEPTION__
#define __EXCEPTION__
#pragma GCC visibility push(default) // L40
#include <bits/c++config.h>
我在 Google 上进行了一些搜索,看到了涉及类似类型错误的内容,但通常是用户代码中语法错误的结果。我还在我大学计算机实验室的机器上看到了这个确切的错误。他们在 ubuntu lucid 上运行 gcc/g++-4.2.4。我在 mac os x 10.6.5 上运行 gcc/g++-4.2.1。