我知道下面using C1::fn;将把C1中声明的fn(...)函数带到C2,但我想知道这样using设计的最佳实践是什么?
如果fn()函数没有使用C1状态,我应该声明一个帮助类是更好的方法吗?如果fn函数正在使用C1状态,那么using打破封装?
如果您甚至可以在C++ 11中提及一些使用案例,我感谢您.就像使用using Base::Base;构造函数而不是从派生成员初始化程序调用它?
class C1
{
//...
public:
int fn(int j) { ... }
double fn(double w) { ... }
void fn(const char * s) { ... }
};
class C2 : public C1
{
//...
public:
//...
using C1::fn;
double fn(double) { ... };
};
Run Code Online (Sandbox Code Playgroud) 为什么这个简单的代码块没有编译
//using namespace std;
struct test {
std::vector<int> vec;
};
test mytest;
void foo {
mytest.vec.push_back(3);
}
int main(int argc, char** argv) {
cout << "Vector Element" << mytest.vec[0] << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
vectorScope.cpp:6:5: error: ‘vector’ in namespace ‘std’ does not name a type
vectorScope.cpp:11:6: error: variable or field ‘foo’ declared void
vectorScope.cpp:11:6: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
vectorScope.cpp:12:12: error: ‘struct test’ has no member named ‘vec’
vectorScope.cpp:12:28: error: expected …Run Code Online (Sandbox Code Playgroud) 这是一种正确的方法吗?
void helperFunc(MyClass *ptr)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());
Run Code Online (Sandbox Code Playgroud)
或者我应该使用shared_ptr进行此类操作?
我找不到任何人类解释:如何创建一系列列表,如:
std::list<int> mylist[size] ?
Run Code Online (Sandbox Code Playgroud)
如果我把它放在我的程序中,它会编译但会产生一些问题,因为它不会执行任何代码(如果我写出mylist w/out [size],其余代码就可以正常工作)
我正在读某个地方,不推荐使用C的原始数组; 有什么选择?
谢谢抱歉
例如:
class Airport : public vector<Airline*>
Run Code Online (Sandbox Code Playgroud)
如何正确释放内存?我不想使用智能指针,因为我在课程中还没有学到它。
我是C++和arduino的新手,我不了解发生了什么.
问题是 :
我有以下变量:
char *_array;
char _data[2];
Run Code Online (Sandbox Code Playgroud)
当我这样做:_array = data;然后我改变_data的内容,比如data[0] = 'C',data[1] = 'D'._array的内容不会改变,我需要_array = _data再次执行更改.
似乎他们没有指向同一个地址.
下面的代码就是这个例子,我的第三个印刷品应该是"3CD"代替"3AB",但事实并非如此.
请问你能帮帮我吗?我不明白.谢谢!
#include <SoftwareSerial.h>
class Base {
public:
Base() {;};
void setArray(char* array) {_array = array;}
char *getArray() {return _array;}
private:
char *_array;
};
class A : public Base{
public:
A() : Base() {;};
A(char data1, char data2)
: Base()
{
setData(data1, data2);
setArray(_data);
}
void setData(char data1, char data2) …Run Code Online (Sandbox Code Playgroud) 我要求用户在控制台上输入一个字符串.但我不知道字符串的长度.
如何定义一个结构以适应具有可变长度的输入?
int main(){
int i;
char s[10];
cout << "input string:";
cin >> s;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果输入字符串长度超过10,示例代码将导致堆损坏.
我试图将5个字符从字符数组复制到 std::string
char name[] = "Sally Magee";
std::string first;
copy(name, name + 5, first.begin()); //from #include <algorithm>
std::cout << first.c_str();
Run Code Online (Sandbox Code Playgroud)
但是我得到了字符串加上一大堆我不想要的不可打印的字符.有任何想法吗?谢谢.
Ship *ship;
if (newShipType == 0)
{
ship = new SmallShip(gridPosition.x, gridPosition.y,
grid->raw);
}
else if (newShipType == 1)
{
ship = new MediumShip(gridPosition.x, gridPosition.y,
grid->raw);
}
else // 2
{
ship = new BigShip(gridPosition.x, gridPosition.y,
grid->raw);
}
Run Code Online (Sandbox Code Playgroud)
我有这个代码,我希望通过以下方式简化:
Ship *ship = new getShipByType[newShipType](gridPosition.x, gridPosition.y, grid->raw);
Run Code Online (Sandbox Code Playgroud)
有可能吗?
Ship getShipByType[3] = {SmallShip, MediumShip, BigShip};
Run Code Online (Sandbox Code Playgroud)
这给了:
error: expected primary-expression before ‘,’ token
error: expected primary-expression before ‘,’ token
error: expected primary-expression before ‘}’ token
Run Code Online (Sandbox Code Playgroud)
我真的不希望它编译,只是寻找一种更简单的方法,这只是一个非常长的尝试.
我目前正在编写一些代码,这些代码将在 Person 类型的向量中进行搜索(我已在代码中定义了该向量,并且将在需要时显示)。如果找到这个人,就会返回他们的名字。这目前正在工作,但如果它没有找到该人,它应该返回一个空指针。问题是,我不知道如何让它返回空指针!它只是每次都会使程序崩溃。
代码:
Person* lookForName(vector<Person*> names, string input)
{
string searchName = input;
string foundName;
for (int i = 0; i < names.size(); i++) {
Person* p = names[i];
if (p->getName() == input) {
p->getName();
return p; //This works fine. No problems here
break;
} else {
//Not working Person* p = NULL; <---Here is where the error is happening
return p;
}
}
}
Run Code Online (Sandbox Code Playgroud)