代码::带有C++块的可见性错误很奇怪
Strange visibility error in Code::Blocks with C++
我在C++上做了一些学术项目,使用Code::Blocks,我得到了一些奇怪的可见性错误。
部分主文件为:
//main.cpp
#include <iostream>
#include <fstream>
#define DEFContainerSize 100
#include <string>
#include <list>
#include <sstream>
#include <cctype>
using namespace std;
#include "iteration1.cpp"
#include "iteration2.cpp"
int main(int argNum, char *args[])
{
//Content skipped here!!
}
包含的迭代 1.cpp 包含如下定义:
部分迭代1.cpp
//Content skipped here!!
template <class Coords, class Rad>
struct
Circle {
Coords Coordinates;
Rad Radius;
};
//Content skipped here!!
template <class Coords, class Rad>
istream
&operator>>(istream &input, Circle<Coords,Rad> &circle)
{
StringFunctionAndArguments fa;
input>>fa;
proc_FromStringFunctionAndArguments2<Coords,Rad>
(fa,"Circle","operator>>",circle.Coordinates,circle.Radius);
return input;
};
template <class Coords, class Rad>
ostream
&operator<<(ostream &output, Circle<Coords,Rad> &circle)
{
output<<"Circle("<<circle.Coordinates<<","<<circle.Radius<<")";
return output;
};
//Content skipped here!!
这工作得很好。但是当我尝试在迭代2中输入类似的定义时.cpp:
//iteration2.cpp this time full file.
template <class Coords>
struct
Triangle
{
Coords Coordinates1,
Coordinates2,
Coordinates3;
};
template <class Coords>
istream
&operator>>(istream &input, Triangle<Coords> &tr)
{
StringFunctionAndArguments fa;
input>>fa;
proc_FromStringFunctionAndArguments2<Coords,Coords>
(fa,"Triangle","operator>>",tr.Coordinates1,
tr.Coordinates2);
tr.Coordinates3 = fa.Arguments.back();
return input;
};
template <class Coords>
ostream
&operator<<(ostream &output, Triangle<Coords> &tr)
{
output<<"Triangle("<<tr.Coordinates1<<
","<<tr.Coordinates2<<
","<<tr.Coordinates3<<")";
return output;
};
我收到奇怪的错误,这不应该发生:
stud1mTRPOlabs1Lab2iteration2.cpp|17|error: 'istream' does not name a type|
stud1mTRPOlabs1Lab2iteration2.cpp|30|error: 'ostream' does not name a type|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 4 seconds) ===|
我仍然可以正常地将其添加到迭代 1.cpp,但我在迭代 2.cpp 中需要它。
我在Windows XP上使用Code::Blocks 12.11,编译
mingw32-g++.exe -std=c++11 -Wall -fexceptions -g
是时候更换 IDE 了吗?
如何解决问题?提前感谢您的回答!
从外观上看,编译器将iteration2.cpp
编译为独立的翻译单元!我会重新评论:
- 创建一个头文件,声明需要从
iteration2.cpp
可见的实体(同样可能对于iteration1.cpp
),并确保 geader 在不依赖它前面的其他标头的情况下工作。 - 更改
#include
指令以使用该标头。 - 将
iteration2.cpp
变成一个适当的翻译单元,即包括它自己的标题以及它所依赖的一切。
问题在于文件添加不正确。
正确的方法是:
1)右键单击{项目名称}-->添加文件。添加新文件 {文件名}。
2) 右键单击 {文件名} --> 属性... --> 构建 --> 取消选中"属于目标"字段中的所有框。
3) ????
4)利润!!
相关文章:
- 如何更改唯一指针向量的可见性
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 限制静态库中符号的可见性 (MSVC/Visual C++)
- 班级成员可见性C++
- 内联模板函数的可见性
- Clang 是否可以在使用可见性属性时生成导入库(不带 __declspec(dllexport))?
- std::mutex 的发布-获取可见性保证是否仅适用于关键部分?
- 符号可见性和 gcc 警告
- C++/libscreen 无法更新可见性
- 在 C++11 线程中,std::mutex 对内存可见性有什么保证?
- C++继承构造函数的可见性
- CRTP - 嵌套叶类类型的可见性
- C++模板 - 实例之间的通用操作和成员可见性
- 放松的订单和线程间可见性
- GCC 6.x警告有关Lambda可见性
- C++ 中的Shared_ptr和内存可见性
- 静态库中的符号可见性和操作
- 代码::带有C++块的可见性错误很奇怪
- 如何在覆盖具有错误可见性的虚拟方法时得到警告
- 符号可见性、异常、运行时错误