这个程序有什么问题?
#include <memory>
#include <vector>
int main()
{
std::vector<std::unique_ptr<int>> vec;
int x(1);
std::unique_ptr<int> ptr2x(&x);
vec.push_back(ptr2x); //This tiny command has a vicious error.
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误:
In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++allocator.h:34:0,
from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/allocator.h:48,
from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/memory:64,
from main.cpp:6:
c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h: In member function 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = std::unique_ptr<int>, _Tp* = std::unique_ptr<int>*]':
c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/stl_vector.h:745:6: instantiated from 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::unique_ptr<int>, _Alloc = std::allocator<std::unique_ptr<int> >, value_type = std::unique_ptr<int>]'
main.cpp:16:21: instantiated from here
c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h:207:7: error: deleted function 'std::unique_ptr<_Tp, _Tp_Deleter>::unique_ptr(const …
Run Code Online (Sandbox Code Playgroud) 什么是依赖范围以及在以下错误的上下文中typename的含义是什么?
$ make
g++ -std=gnu++0x main.cpp
main.cpp:18:10: error: need 'typename' before 'ptrModel<std::vector<Data> >::Type' because 'ptrModel<std::vector<Data> >' is a dependent scope
make: *** [all] Error 1
/*
* main.cpp
*/
#include <vector>
#include <memory>
template<typename T>
struct ptrModel
{
typedef std::unique_ptr<T> Type;
};
template<typename Data>
struct ptrType
{
typedef ptrModel< std::vector<Data> >::Type Type;
};
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud) 例如,是
int const x = 3;
Run Code Online (Sandbox Code Playgroud)
有效代码?
如果是这样,它是否意味着相同
const int x = 3;
Run Code Online (Sandbox Code Playgroud)
?
如果是这样,为什么?为什么不使用值类型的复制构造函数?
我收到以下错误:
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/vector.tcc: In member functio
n `ClassWithoutAss& ClassWithoutAss::operator=(const ClassWithoutAss&)':
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/vector.tcc:238: instantiate
d from `void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterato
r<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, const _Tp&) [with _Tp =
ClassWithoutAss, _Alloc = std::allocator<ClassWithoutAss>]'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_vector.h:564: instantia
ted from `void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = Class
WithoutAss, _Alloc = std::allocator<ClassWithoutAss>]'
main.cpp:13: instantiated from here
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/vector.tcc:238: error: non-st
atic const member `const int ClassWithoutAss::mem', can't use default assignment
operator
Run Code Online (Sandbox Code Playgroud)
在以下代码上运行g ++ main.cpp:
/*
* ClassWithoutAss.h
*
*/
#ifndef CLASSWITHOUTASS_H_
#define CLASSWITHOUTASS_H_
class ClassWithoutAss
{ …
Run Code Online (Sandbox Code Playgroud) 如何在C++中实现相互递归的类?就像是:
/*
* Recursion.h
*
*/
#ifndef RECURSION_H_
#define RECURSION_H_
class Class1
{
Class2* Class2_ptr;
public:
void Class1_method()
{
//...
(*Class2_ptr).Class2_method();
//...
}
};
class Class2
{
Class1* Class1_ptr;
public:
void Class2_method()
{
//...
(*Class1_ptr).Class1_method();
//...
};
};
#endif /* RECURSION_H_ */
Run Code Online (Sandbox Code Playgroud) 例如,在
unique_ptr<Derived> = new deriv;
std::vector<unique_ptr<Base>>.push_back(std::move(deriv));
Run Code Online (Sandbox Code Playgroud)
将派生切片打字unique_ptr<Base>
?
我想做的事情如下:
/*
* Superclass.h
*
*/
class Superclass
{
const int size;
public:
Superclass():size(1){}
~Superclass(){}
};
/*
* Subclass.h
*
*/
#include "Superclass.h"
class Subclass : public Superclass
{
public:
Subclass(){size;}
~Subclass(){}
};
Run Code Online (Sandbox Code Playgroud) 我听说const成员必须明确初始化,但以下编译对我来说:
class someClass
{
int const x;
};
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)