在构造函数' cout'在这方面没有申明

时间:2017-12-14 20:48:44

标签: c++ inheritance scope cout

我想练习一些基本的c ++东西。我专注于继承只是为了试验它。一切顺利,直到我遇到一些奇怪的问题:' cout'在这方面没有申明。我已经查看了一些主题,但是大多数提示都是附加库或者使用命名空间std'但它并没有解决我的问题。

#include <iostream>

class podst
{
public:
    float a;
    float b;
    float dodaw();
    podst(float c,float d) : a(c), b(d)
    {

    }
};
float podst::dodaw()
{
    return (a+b);
}

class poch : public podst
{
    poch() : podst(5,4)
    {
       cout << a << endl << b << dodaw() << endl;
    }

};


using namespace std;
int main()
{
    podst podst(1,2);
    cout <<  podst.dodaw() << endl;
    poch poch2;

    return 0;


}

6 个答案:

答案 0 :(得分:2)

using namespace std低于你第一次使用cout。 尝试在poch类中使用std :: cout和std :: endl。

答案 1 :(得分:1)

poch从全局命名空间调用cout,而不是从std命名空间调用using namespace std;。请注意poch() : podst(5,4) { using namespace std; cout << a << endl << b << dodaw() << endl; } 指令实际上低于它,而不是上面。如果您不希望每次都写出整个名称空间前缀,那么最好根据每个函数放置该指令,而不是基于每个文件:

git clone --recursive https://github.com/dmlc/xgboost
cd xgboost
git submodule init
git submodule update
cd R-package
R CMD INSTALL .

这种方法有助于将大型代码库保持在一块。

答案 2 :(得分:0)

使用声明在您编写它时开始生效。由于cout的呼叫高于该点,因此using不会覆盖std::cout,您必须在那里拼出using std::cout;

You should avoid using namespace std。一个更好的选择是只提供你需要的东西,例如与cout。但更好的选择是使用限定名称。打字要多一点,但它可以防止歧义;在我看到的每个代码库中,合格的名称都是无处不在的 - 至少在我看来 - 像if args.daemon: pid = os.fork() if pid > 0: sys.exit(0) os.close(0) os.close(1) os.close(2) main() def main(): # some code p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 这样的不合格的名字总是有点令人惊讶,并且在阅读代码时会略微惹恼我。

答案 3 :(得分:0)

因为poch是一个继承自父类所需的类 在文件的开头声明标准命名空间,使其对所有类和函数都是全局的,但是你在main之前声明它,所以poch类不能使用它,而是你可以显式地使用std :: cout和std :: endl和程序编译没有问题。

答案 4 :(得分:0)

export const getCurrentUserUid = createSelector(
  getContestState,
  state => state.currentUserUid
);

export const getMine = createSelector(
  selectAll,
  getCurrentUserUid,
  (contests, currentUserUid) =>
    contests.filter(contest => contest.owner === currentUserUid)
);

答案 5 :(得分:0)

如果要省略标准库命名空间caller :: std,则应编写

using namespace std;

之前(通常写在#include语句之后和int main()“

之前
cout << ...

编译器按顺序读取代码。请注意,使用“使用”被认为是不好的做法。我建议习惯使用std :: namespace调用者:

std::cout << "Hello World!" << std::endl;

解决您的具体问题:

#include <iostream>

using namespace std;

class podst { ...