我下载了一个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];
};
问题解决了。缺少一个括号来关闭引起它的一个类的声明。
答案 0 :(得分:5)
错误意味着您已完成此操作:
struct Foo {
using std::cout;
...
};
这是无效的C ++,在类体中只能为基类成员添加using声明,而不是任意名称。
您只能在命名空间范围或函数体内添加using std::cout
。
答案 1 :(得分:0)
只要将其放在public
或private
部分下,就可以将其放在类中。
#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。这就是导致错误的原因。 (至少对我而言)。