小编use*_*299的帖子

具有不足字段的此C/C++ struct初始化程序如何工作?

我正在看一些我感到困惑的代码.

此代码段位于头文件RPI.h中:

#define BCM2708_PERI_BASE  0x20000000
#define GPIO_BASE         (BCM2708_PERI_BASE + 0x200000) // GPIO controller 

// IO Access
struct bcm2835_peripheral {
    unsigned long addr_p;
    int mem_fd;
    void *map;
    volatile unsigned int *addr;
};

struct bcm2835_peripheral gpio = {GPIO_BASE};

extern struct bcm2835_peripheral gpio;
Run Code Online (Sandbox Code Playgroud)

从RPI.c文件:

#include "RPI.h"

struct bcm2835_peripheral gpio = {GPIO_BASE};
Run Code Online (Sandbox Code Playgroud)

我对.h和.c文件中的行感到困惑:

struct bcm2835_peripheral gpio = {GPIO_BASE};
Run Code Online (Sandbox Code Playgroud)

在我看来,一个bcm2835_peripheral名为named 的新结构gpio被实例化并设置为等于GPIO_BASE.但是,该结构有四个公共成员.它们都被设定为GPIO_BASE

我只包括相关的.h和.c文件中的行.这些行按原始文件中的顺序排列.

c c++

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

.gitignore 不适用于 Visual Studio 2019

我无法.gitignore使用Visual Studio 2019 Community。

在此输入图像描述

上图是“团队资源管理器”选项卡的图像,显​​示了要提交的文件列表的一部分。这些文件所在的目录 x64\Debug 位于 C:\Users\ username \Source\repos\Tetris_System\Tetris_Game 下。C:\Users\ username \Source\repos\Tetris_System 包含.git.vs文件夹和.gitignore文件。

我有一个非常简单的.gitignore文件,其中只有一行:

*.obj
Run Code Online (Sandbox Code Playgroud)

我的理解是,这一行应该*.obj从提交列表中删除所有文件。这些文件不应该*.obj从列表中消失吗?

从之前的提交来看,所有这些都*.obj位于 GitHub 存储库中。

git github gitignore visual-studio

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

如何使用“get”方法返回类的私有 std::unique_ptr 成员

我创建了一个带有私有 std::unique_ptr 成员的类,即m_VBOm_EBO,如图所示。

class VAO {

public:
    VAO();
    std::unique_ptr<VBO> GetVBO();
    std::unique_ptr<EBO> GetEBO();

private:
    std::unique_ptr<VBO> m_VBO;
    std::unique_ptr<EBO> m_EBO;
};
Run Code Online (Sandbox Code Playgroud)

该类还包括“get”方法来保护和返回这些成员以供需要时使用。

这些“get”方法的定义是,

//*************************************************************************************************
std::unique_ptr<VBO> VAO::GetVBO()
{
    return std::make_unique<VBO>(m_VBO);
    //return std::make_unique<VBO>();
}

//*************************************************************************************************
std::unique_ptr<EBO> VAO::GetEBO()
{
    //return std::make_unique<EBO>(m_EBO);
    return std::make_unique<EBO>();
}
Run Code Online (Sandbox Code Playgroud)

这是行不通的。

我无法找出编写“get”方法的正确技术。

它是如何完成的?

c++ unique-ptr

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

实现不可复制的 C++ 类

在 Visual Studio 2019 中,我正在尝试实现使 C++11 显示的类不可复制的技术,后来在如何使这个 C++ 对象不可复制?.

我的课是

class Foo {

public:
    Foo();
    Foo(std::string name);
    ~Foo();

    std::string m_name;

    static std::int32_t s_counter;

public:
    Foo(const Foo& inFoo) = delete;
    Foo& operator=(const Foo& inFoo) = delete;
};
Run Code Online (Sandbox Code Playgroud)

定义代码是,

std::int32_t Foo::s_counter = 0;

Foo::Foo(void)
{
    Foo::s_counter++;
    std::cout << "Foo constructor.  Count = " << Foo::s_counter << std::endl;
}

Foo::Foo(std::string name)
{
    Foo::s_counter++;
    m_name = name;
    std::cout << "Foo " << m_name << " constructor.  Count = " << Foo::s_counter << …
Run Code Online (Sandbox Code Playgroud)

c++ constructor

-5
推荐指数
1
解决办法
138
查看次数

标签 统计

c++ ×3

c ×1

constructor ×1

git ×1

github ×1

gitignore ×1

unique-ptr ×1

visual-studio ×1