相关疑难解决方法(0)

为什么"使用命名空间std"被认为是不好的做法?

我已经告诉别人,编写using namespace std;代码是错误的,我应该用std::coutstd::cin直接代替.

为什么被using namespace std;认为是不好的做法?是低效还是冒着声明模糊变量(与名称std空间中的函数具有相同名称的变量)的风险?它会影响性能吗?

c++ namespaces using-directives std c++-faq

2486
推荐指数
36
解决办法
78万
查看次数

使用std命名空间

关于std命名空间使用'using'似乎有不同的看法.

有人说使用' using namespace std',其他人说不要,而是先加上与' std::' 一起使用的std函数,而其他人则说使用这样的东西:

using std::string;
using std::cout;
using std::cin;
using std::endl;
using std::vector;
Run Code Online (Sandbox Code Playgroud)

对于要使用的所有std函数.

各自的优点和缺点是什么?

c++ namespaces

105
推荐指数
4
解决办法
9万
查看次数

我应该在标题中使用#include吗?

是否需要#include某个文件,如果在标题(*.h)内,使用此文件中定义的类型?

例如,如果我使用GLib并希望gchar在我的标题中定义的结构中使用基本类型,是否有必要执行a #include <glib.h>,知道我已经在我的*.c文件中有它?

如果是,我还必须把它放在#ifndef#define之后#define

c file-organization c-preprocessor

70
推荐指数
3
解决办法
5万
查看次数

C/C++中自给自足的头文件

我最近发布了一个问题,询问什么行为将构成C++禅宗.我收到了很好的答案,但我无法理解一个建议:

  • 使头文件自给自足

你如何确保你的头文件是自给自足的

任何其他与C/C++中头文件的设计和实现相关的建议或最佳实践都将受到欢迎.

编辑:我发现这个问题涉及我的"最佳实践"部分.

c++ header-files

24
推荐指数
4
解决办法
1万
查看次数

应该在头文件中使用C++命名空间别名吗?

在C++标头中使用它被认为是不好的做法using namespace.在标头中使用命名空间别名同样是个坏主意,每个实现文件应该声明它希望使用的别名吗?

由于标题是您倾向于使用完全指定名称的位置(因为我们不在标题中使用名称空间),所以别名会很有用,但它们仍然会通过您的源传播#included.

这里的最佳做法是什么?什么空间别名的范围是什么?

c++ namespaces

11
推荐指数
1
解决办法
4899
查看次数

“向量”未在此范围内声明

我收到这个错误,当我在 *h 和 *cpp 中分离一个文件时,以下代码未在此范围内声明“向量”这是main.cpp:

#include <iostream>
#include <math.h>
#include <vector>
#include "functia.h"

using namespace std;

int main()
 {
  vector<double> s(3);
  double b= 4;
  fun(s, b);
  cout<<s[0]<<endl;
  double c= 9;
  fun(s, c);
  cout<<s[0];

  }
Run Code Online (Sandbox Code Playgroud)

功能.h:

 void fun(vector<double> & rS, double a)
 {
   rS[0] = a + 3;
   rS[1] = 4;
   rS[2] = 5;
 }
Run Code Online (Sandbox Code Playgroud)

功能.cpp:

#include <iostream>
#include <math.h>
#include<vector>

using namespace std;


void fun(vector<double> &, double );
Run Code Online (Sandbox Code Playgroud)

c++ vector

6
推荐指数
1
解决办法
4万
查看次数

我在哪里将字符串库包含在我的C++头文件中

我的简单类不会在Visual Studio中编译.在我将字符串公司成员和getter方法getCo()添加到它之前,它工作正常.我想我需要将#include字符串标准库放在某处,但我不知道在哪里.知道在哪里?在我的头文件中,我有:

#pragma once
#ifndef ENGINEER_H_
#define ENGINEER_H_

class engineer {
    int years;
    string company;
public:
    engineer(int years);
    ~engineer(void);
    int getYears();
    string getCo();
};

#endif ENGINEER_H_
Run Code Online (Sandbox Code Playgroud)

在我的CPP文件中定义类,我有:

#include "StdAfx.h"
#include "engineer.h"

engineer::engineer(int y, string c){
    years = y;
    company = c;
}

engineer::~engineer(void) {
}

int engineer::getYears() {
    return years;
}

string engineer::getCo() {
    return company;
}
Run Code Online (Sandbox Code Playgroud)

header-files visual-c++

5
推荐指数
1
解决办法
2万
查看次数

不能包含<QtCharts/QLineSeries>

似乎我找不到一种方法来包含<QtCharts/QLineSeries>在我的标题中,所以Qt知道QLineSeries类.

  • 我添加Qt += charts到我的.pro文件中.
  • 我加入#include <QtCharts/QLineSeries>MainWindow.h
  • 然后我删除.pro.user文件和我已经完成的任何构建.然后重新打开.pro文件以最干净的方式重新配置项目.
  • 最后,我将构建模式设置为Release,通过右键单击项目并选择它并运行它来运行QMake.

我收到消息:

 ...\PlottingCharts\mainwindow.h:14: error: 'QLineSeries' does not name a type
     QLineSeries *series;
     ^
Run Code Online (Sandbox Code Playgroud)

很明显,Qt对QLineSeries一无所知.

作为参考,这些linechartopenglseries示例正常工作.

谁知道我错过了什么?

c++ qt qtcharts

5
推荐指数
1
解决办法
8012
查看次数

C++ map::erase() 不擦除数据

我正在尝试map::erase()使用以下代码测试 C++ :

//file user.h
#include <string>
#include <fstream>
#include <cstring>

using namespace std;

class User {
    string name;
    int id;
public:
    User(const string& name, int id) : name(name), id(id) {}
    int getID() const {return id;}
    ~User(){}
};

//file main.cpp
#include "user.h"
using namespace std;

typedef map<string, User*> Dict;

int main()
{
    Dict dict;
    dict["Smith"] = new User("Smith", 666); //Id = 666
    dict["Adams"] = new User("Adams", 314); //Id = 314


    auto it = dict.find("Adams"); //look for user 'Adams' …
Run Code Online (Sandbox Code Playgroud)

c++ dictionary erase

3
推荐指数
1
解决办法
957
查看次数

使用“多个”命名空间单行

有没有一种简化的方法来包含更多的命名空间,而不是每次都输入相同的东西。这很烦人,尤其是在 .h 文件中。

例如:

而不是写:

int f() {
    using namespace blabla1;
    using namespace blabla2;
    using namespace blabla3;

}
Run Code Online (Sandbox Code Playgroud)

我会选择:

使用 myNamespace = blabla1, blabla2, blabla3;

int f() {
    using namespace myNamespace;
    /// this will be equivalent to the previous example
    }
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ namespaces c++11 inline-namespaces

3
推荐指数
1
解决办法
73
查看次数