小编bil*_*llz的帖子

何时使用声明?

我知道下面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)

c++ encapsulation using

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

带向量成员的全局结构

为什么这个简单的代码块没有编译

//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)

c++ struct vector

4
推荐指数
2
解决办法
5022
查看次数

将std :: unique_ptr传递给辅助函数

这是一种正确的方法吗?

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进行此类操作?

c++ stl smart-pointers unique-ptr c++11

4
推荐指数
2
解决办法
2012
查看次数

std :: list c的数组

我找不到任何人类解释:如何创建一系列列表,如:

std::list<int> mylist[size] ?
Run Code Online (Sandbox Code Playgroud)

如果我把它放在我的程序中,它会编译但会产生一些问题,因为它不会执行任何代码(如果我写出mylist w/out [size],其余代码就可以正常工作)

我正在读某个地方,不推荐使用C的原始数组; 有什么选择?

谢谢抱歉

c++ arrays list

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

我有一个指向对象的指针向量。如何释放内存?

例如:

class Airport : public vector<Airline*>
Run Code Online (Sandbox Code Playgroud)

如何正确释放内存?我不想使用智能指针,因为我在课程中还没有学到它。

c++

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

C++:两个指针(据说是)到同一个地址.更改其中一个的内容不会更改另一个的内容

我是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)

c++ pointers arduino

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

从控制台获取字符串但不知道长度

我要求用户在控制台上输入一个字符串.但我不知道字符串的长度.

如何定义一个结构以适应具有可变长度的输入?

int main(){
    int i;
    char s[10];

    cout << "input string:";
    cin >> s;

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

如果输入字符串长度超过10,示例代码将导致堆损坏.

c++ string iostream input

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

将字符长度从数组复制到std :: string

我试图将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)

但是我得到了字符串加上一大堆我不想要的不可打印的字符.有任何想法吗?谢谢.

c++ arrays string copy strncpy

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

实际类的数组

  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)

我真的不希望它编译,只是寻找一种更简单的方法,这只是一个非常长的尝试.

c++ oop design-patterns

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

如何在 C++ 函数中返回空指针

我目前正在编写一些代码,这些代码将在 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)

c++ null pointers vector

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