小编R. *_*des的帖子

命名空间对我没有意义

假设我在头文件中定义了以下内容:

namespace MyNamespace
{
   Class global_c;
}
Run Code Online (Sandbox Code Playgroud)

然后我在源文件中执行此操作:

namespace MyNamespace
{
   void MyClass::Function( )
   {
       ::global_c.DoSomething( );
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我只做global_c.DoSomething(); global_c结果是编译器未定义的.但如果我添加'using namespace MyNamespace;'它编译得很好 到文件的顶部它也可以正常工作.

由于global_c与"MyClass"位于同一个命名空间中,为什么不能仅仅因为"::"被添加到它的前面来解决它?

c++ namespaces

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

在C++ 03中定义覆盖是否合法

我们有一个使用许多C++ 11工具的项目,我们考虑过这个技巧,使它在C++ 03上编译.

#ifndef USE_CPP0X
#    define override
#endif
Run Code Online (Sandbox Code Playgroud)

据我所知,禁止定义C++关键字,这是合法的吗?

c++ c++11 c++03

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

如何在c ++中解决错误"表达式必须是可修改的左值"?

const int ADJ_MATRIX[VERTEX_NUM][VERTEX_NUM]={   
                                                {0,1,1,0,0,0,0,0},
                                                {1,0,0,1,1,0,0,0},
                                                {1,0,0,0,0,1,1,0},
                                                {0,1,0,0,0,0,0,1},
                                                {0,1,0,0,0,0,0,1},
                                                {0,0,1,0,0,0,1,0},
                                                {0,0,1,0,0,1,0,0},
                                                {0,0,0,1,1,0,0,0}
                                            };

typedef struct {
    int vertex;
    int matrix[VERTEX_NUM][VERTEX_NUM];
    int vNum;
    int eNum;
}Graph;

void buildGraph(Graph *graph){
    graph->vNum = VERTEX_NUM;
    graph->eNum = EDGE_NUM;
    graph->matrix = ADJ_MATRIX;
}
Run Code Online (Sandbox Code Playgroud)

错误发生在这句话中:

graph->matrix = ADJ_MATRIX;
Run Code Online (Sandbox Code Playgroud)

我是c ++的新手.请告诉我为什么会出现这个问题以及如何解决?

我想将ADJ_MATRIX分配给矩阵struct.

c++ visual-c++

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

嵌套c ++ 11范围循环用于查找组合

查找组合涉及同一容器上的两个循环.

the first iterates over elements:
  pick an element
  iterate over the elements on the left
    print the first and the second iterated elements
Run Code Online (Sandbox Code Playgroud)

所以这是一个错误的例子:

vector<int> vec;
for(size_t i=0; i< 10 ; ++i) vec.push_back(i);
for(auto i : vec)
{
  auto j = i.increaseBy(1);
  for(j : vec) cout << i << j << "\n";
}
Run Code Online (Sandbox Code Playgroud)

在这个问题中,我感兴趣的是,范围循环的语法还有更多,只是迭代元素的简单方法.关于c ++ 11的文档不多.

c++ combinations iterator for-loop c++11

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

为什么不能从初始化列表初始化我的类,即使它派生自std :: list?

我有以下代码.

#include <utility>
#include <list>
#include <iostream>

class Pair: public std::pair<unsigned int, unsigned int>{
    Pair (unsigned int h, unsigned int l) : pair(h,l){};
};
class PairList: public std::list<Pair>{};


int main(int argc, char** argv){

    PairList pl = {{800,400},{800,400}};
}
Run Code Online (Sandbox Code Playgroud)

我使用命令行使用MinGW g ++ v4.6编译它
g++ -std=c++0x Test.cpp -o test.exe
并得到错误:
error: could not convert '{{800, 400}, {800, 400}}' from '<brace-enclosed initializer list>' to 'PairList'
但是如果在main()中我写的
list<pair<unsigned int,unsigned int>> pl = {{800,400},{800,400}};
一切正常.
WTF?

c++ initializer-list c++11 list-initialization

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

如何在while(cin >> x)成语中包含'\n'?

我的理解是操作符>>返回左操作数,因此如果遇到错误或其他错误则cin >> x返回cin值.现在我的猜测是,因为跳过空白,所以不会存储字符.我想做的是这样的事情:falseEOFcin\n

int x;

while((cin >> x) and x != '\n')
    // do stuff
Run Code Online (Sandbox Code Playgroud)

因此,当cin在流中遇到换行符时,它会退出输入循环(正如通常所说的那样EOF).

c++

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

扫描头文件的程序,并报告可利用的代码?

当我包含一个头文件时,我常常想知道是什么内容.

  • 我现在可以使用哪些功能?
  • 我可以实例化哪些类,它们的功能是什么?
  • 是否包含在命名空间中?
  • 全局命名空间中有什么内容吗?

文档并不总是回答这些问题,也不提供任何保证.

我可以查看源代码,但是对于包含其他标头树的大型头文件也很难观察到.
有什么好的程序可以做这种分析吗?

c c++ static-analysis header

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

填充数组数组

这是我的代码:

#include <cstdlib>
#include <stdio.h>

using namespace std;

int main(int argc, char** argv) {

    int a[] = {0,1,2,3,4,5,6,7};
    int array_grande[3][8];

    for(int m=0; m<3; m++) {
        for(int i=0; i<8; i++) {
                array_grande[m] = a[i];
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我已经将array_grande声明为一个具有3个位置且每个位置为8个整数的数组,所以我想要的是一个数组数组.

array_grande = {{0,1,2,3,4,5,6,7},{0,1,2,3,4,5,6,7},{0,1,2,3,4,5,6,7}}
Run Code Online (Sandbox Code Playgroud)

我做的代码不起作用,我想这是因为第二个索引array_grande.任何人都可以帮我一把吗?我想尽可能地保留代码.提前致谢

c++ arrays

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

Java使用UTF-8读取和写入文件到文件

我正在创建一个类似日语字典的程序,所以我需要将日文单词对象存储在一个文件中.我目前正在尝试创建一个无线编码的dat文件,但我一直在获取FileNotFound Exceptions.我的主要目标是能够将我自定义创建的单词对象存储在一个文件中,该文件可以存储和读取包含日文文本和值数组的对象.所以如果你知道无论如何要解决这个问题,我将非常感激!

这是我的试用课来测试它:

  public class JavaApplication1 {

/**
 * @param args the command line arguments
 */
Scanner scan = new Scanner(System.in);
//File file = new File("test.dat");
public static void main(String[] args) throws FileNotFoundException, IOException,    ClassNotFoundException {
    // TODO code application logic here
    JavaApplication1 ja = new JavaApplication1();
    ja.start();
}
public void start() throws FileNotFoundException, IOException, ClassNotFoundException{

    System.out.println("Enter Kanji");
    String Kanji = scan.next();
    System.out.println("Enter Romanji");
    String Romanji = scan.next();
    System.out.println("How common is it");
    int common = scan.nextInt();
    System.out.println("How many types of …
Run Code Online (Sandbox Code Playgroud)

java filenotfoundexception

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

在移动被认为安全之前得到右值参考的地址?

我正在玩Move Semantics和[r | l]值引用来学习如何在真实世界的程序中使用它们.考虑以下代码:

// Item is a heavy class having move ctor and assignment but no copy. 
std::map<std::string, Item*> lookup;
std::forward_list<Item> items;
void FooClass::addItem(Item&& d) {
    if (lookup.find(d.getName()) == lookup.end()) {
        lookup[d.getName()] = &d;    //<== not safe after move?
        items.push_front(std::move(d));
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在获取一个地址Item&&并将其存储在指针中.然后将数据移动到std::forward_list(items).我假设调用移动赋值不会影响对象的地址.那是对的吗?虽然d移动后内容不再有效.这是查找表(lookup)的内容不正确.

我假设我必须重新订购a)添加查找项目和b)移动实际数据.上面的代码并不理智.它是否正确?

我也不明白为什么我要说std::move那里.编译器应该知道这d是一个右值引用.所以它应该调用std::forward_list<T>::push_front(T&&)并移动赋值...

c++ rvalue-reference move-semantics c++11

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