错误:使用std :: cout对类范围内的非成员使用声明

时间:2015-11-14 21:30:08

标签: c++

我下载了一个c ++项目,并且能够使用cmake生成的makefile编译它。

然而,当我尝试在项目的一个.hh文件中添加我自己的一系列.h文件时,我开始得到一百万个错误,其中一个是:

  

错误:在类范围内对非成员使用声明    使用std :: cout;

当包含的.h文件时 using std::cout在其他地方使用,但在添加到此项目时会出现此错误。

可能是什么问题?

using std::cout;
using std::endl;
class TextManager : public FileManager {
    public:
        TextManager (const char * filename);
        void scanFile (Image &image, Scene &scene);
        void scanObjectModel (Image &image, Scene &scene);
        void getImageData (Image &image);
        void getMaterialData (Scene &scene);
        void getLightData (Scene &scene);
        void getSphereData (Scene &scene);
        void getPlaneData (Scene &scene);
        void getTriangleData (Scene &scene);
        int getLineValue (int size);
        void getLineValue2 (float (&lineNumbers) [10], Scene &scene, int &lineNumbersIndex);
        void getVerticesValues (int initPos, Scene &scene);  
        private:
   std::string line;
   float fractionaryTenPowers [6];
};

问题解决了。缺少一个括号来关闭引起它的一个类的声明。

3 个答案:

答案 0 :(得分:5)

错误意味着您已完成此操作:

struct Foo {
  using std::cout;
  ...
};

这是无效的C ++,在类体中只能为基类成员添加using声明,而不是任意名称。

您只能在命名空间范围或函数体内添加using std::cout

答案 1 :(得分:0)

只要将其放在publicprivate部分下,就可以将其放在类中。

#include <iostream>

namespace CoolNamespace
{
  struct AnotherReallyLongClassName
  {
    int a = 75;
  };

  struct SomeReallyLongClassName
  {
    int a = 42;
  };
} // namespace CoolNamespace

class Widget
{

  // You can't do this though!
  // using ShorterName = CoolNamespace::SomeReallyLongClassName;

  public:

    // You can use a using statement inside of a class!
    using ShorterName = CoolNamespace::SomeReallyLongClassName;
    ShorterName foo;

    int get_another_name()
    {
      return bar.a;
    }

  private:
    // You can do it here also!
    using AnotherName = CoolNamespace::AnotherReallyLongClassName;
    AnotherName bar;
};

int main()
{
  Widget widget;
  std::cout << widget.foo.a << std::endl;

  // Also, if you can reference public using statements from the class definition.
  Widget::ShorterName thing;
  std::cout << thing.a << std::endl;

  // But you can't do this because it's private.
  // Widget::AnotherName name;

  return 0;
}

答案 2 :(得分:-2)

确实,请检查您在类声明中的成员函数之一中是否有一个左括号。

我在 .h 文件中做了这个;

class foo{
    void cat();
    void bar{
    void dog();
}

in .cc file I defined the member functions
void foo::cat(){
    std::cout<<"This is cat"<<std::endl;
}

void foo::bar(){
    std::cout<<"hello"<<std::endl;
}

void foo::dog(){
    std::cout<<"meow"<<std::endl;
}

但是请注意我使用了 { 而不是;对于 .h 文件中的成员函数 bar。这就是导致错误的原因。 (至少对我而言)。