假设我在头文件中定义了以下内容:
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++ 11工具的项目,我们考虑过这个技巧,使它在C++ 03上编译.
#ifndef USE_CPP0X
# define override
#endif
Run Code Online (Sandbox Code Playgroud)
据我所知,禁止定义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.
查找组合涉及同一容器上的两个循环.
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的文档不多.
我有以下代码.
#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?
我的理解是操作符>>返回左操作数,因此如果遇到错误或其他错误则cin >> x返回cin值.现在我的猜测是,因为跳过空白,所以不会存储字符.我想做的是这样的事情:falseEOFcin\n
int x;
while((cin >> x) and x != '\n')
// do stuff
Run Code Online (Sandbox Code Playgroud)
因此,当cin在流中遇到换行符时,它会退出输入循环(正如通常所说的那样EOF).
当我包含一个头文件时,我常常想知道是什么内容.
文档并不总是回答这些问题,也不提供任何保证.
我可以查看源代码,但是对于包含其他标头树的大型头文件也很难观察到.
有什么好的程序可以做这种分析吗?
这是我的代码:
#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.任何人都可以帮我一把吗?我想尽可能地保留代码.提前致谢
我正在创建一个类似日语字典的程序,所以我需要将日文单词对象存储在一个文件中.我目前正在尝试创建一个无线编码的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) 我正在玩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++ ×9
c++11 ×4
arrays ×1
c ×1
c++03 ×1
combinations ×1
for-loop ×1
header ×1
iterator ×1
java ×1
namespaces ×1
visual-c++ ×1