代码::块中出现奇怪的可见性错误,带有C++; 我在C++上做了一些学术项目,使用代码::块,并且我得到了一些奇怪的可见性错误。

代码::块中出现奇怪的可见性错误,带有C++; 我在C++上做了一些学术项目,使用代码::块,并且我得到了一些奇怪的可见性错误。,c++,c++11,codeblocks,C++,C++11,Codeblocks,部分主文件是: //main.cpp #include <iostream> #include <fstream> #define DEFContainerSize 100 #include <string> #include <list> #include <sstream> #include <cctype> using namespace std; #include "iteration1.cpp" #include

部分主文件是:

//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!!
}
我仍然可以正常地将它添加到iteration1.cpp,但我需要在iteration2.cpp中使用它

我在Windows XP上使用代码::Blocks 12.11,使用

mingw32-g++.exe -std=c++11 -Wall -fexceptions  -g
是时候换IDE了吗


我怎样才能解决这个问题?提前感谢您的回答

从外观上看,编译器将
iteration2.cpp
编译为一个独立的翻译单元!我建议:

  • 创建一个头文件,声明需要在
    iteration2.cpp
    中可见的实体(对于
    iteration1.cpp
    ),并确保geader工作时不依赖其前面的其他头
  • 更改
    #include
    指令以使用标题
  • iteration2.cpp
    转换为适当的翻译单元,即包括它自己的标题以及它所依赖的一切

  • 问题在于文件添加不正确

    正确的方法是:

    1) 右键单击{projectname}-->添加文件。正在添加新文件{filename}

    2) 右键单击{filename}-->属性…-->构建-->取消选中“属于目标”字段中的所有框

    3)


    4) 利润

    创建一个显示问题的对话框。问题最有可能出现在此处跳过的
    //内容之一中部分。@Anon Imous:让我翻译一下我听到你说的话:“伙计们,请你们找出我的问题!我不想费心去追踪它!”我看了一下你的示例代码,我认为问题在于你没有发布的东西。现在我可以花时间尝试重新创建一个类似的问题,推测不可见代码中的内容,可能会提出一些与实际问题不同的内容。或者,你会发布实际问题[尽管我完全预计在创建SSCCE时会出现一些愚蠢的错误,你会发现自己]。@Anon Imous:根据你对abe的评论,问题是你将该文件编译为自己的翻译单元。当然有不同的方法来解决这个问题,例如,将其作为一个独立的翻译单元从项目中删除。我仍然会遵循我上面的建议!
    
    //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;
            };
    
    stud\1mTRPO\labs\1\Lab2\iteration2.cpp|17|error: 'istream' does not name a type|
    stud\1mTRPO\labs\1\Lab2\iteration2.cpp|30|error: 'ostream' does not name a type|
    ||=== Build finished: 2 errors, 0 warnings (0 minutes, 4 seconds) ===|
    
    mingw32-g++.exe -std=c++11 -Wall -fexceptions  -g