小编rem*_*emi的帖子

仅为一个对象创建一个类

我认为这是一个非常简单的问题,但我似乎无法通过谷歌搜索找到一个好的答案.

在用C++编程时(作为初学者),我经常喜欢使用类来组织我的代码.但是,当我只需要该类的一个对象时,是否有理由不创建类?当我学习面向对象编程时,我理解当你需要很多对象时,类是一种描述某些对象的方法.

我想我的问题很简单:如果只需要该类的一个对象,创建一个类是否常见?

c++ oop class

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

Visual Studio C++ 包含目录的所有子文件夹中的所有文件

在 Visual Studio 中的 C++ 项目中:

Project Properties> Linker> Input>Addtional Dependencies

我可以写入$(MyEnvVar)\folderA\*.lib以包含所有库。

但是假设 folderB 有许多子目录,每个子目录都有一组头文件。

如果我想一口气将它们全部包含在内,请在:

Project Properties> C/C++> General>Addtional Include Directories

我想写一些类似的东西:$(MyEnvVar)\folderB\*\或者$(MyEnvVar)\folderB\*\*\在每个文件夹中深入一个子目录。

这似乎不起作用。

(可选)我可以这样做,$(MyEnvVar)\folderB\并且在我的代码中,我会将每个文件包含为#include "name_of_subfolder\name_of_file.h". (这是我想要避免的。)

是否可以在一行中包含某个文件夹的所有子文件夹中的所有文件?

c++ include visual-studio

5
推荐指数
0
解决办法
3961
查看次数

在头文件C++中初始化变量

编辑:正确的函数名称,并添加#pragma一次

这是我的问题的一个非常强大的简化,但如果我这样做:

#pragma once
static int testNumber = 10;
void changeTestNumber();
Run Code Online (Sandbox Code Playgroud)

A.cpp

#pragma once
#include "A.h"

void changeTestNumber()
{
    testNumber = 15;
} 
Run Code Online (Sandbox Code Playgroud)

BH

#pragma once
#include "A.h"
// some other stuff
Run Code Online (Sandbox Code Playgroud)

B.cpp

#pragma once
#include "B.h"
// some other stuff
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#pragma once
#include "B.h"
#include <iostream>

int main(){

changeTestNumber();
std::cout<<testNumber<<std::endl;

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

为什么我在呼叫时没有得到testNumber = 15?当我使用包含在我的包含标题的标题中的函数时,会发生什么?如果我删除在从INT testNumber,我会得到一些错误,我的testNumber被初始化两次.

当我这样做时,我的标题编译了两次吗?

提前致谢!

c++ initialization header

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

glfwCreateWindow 返回 NULL

我一直在 Visual Studio 2015 中使用 C++ 开发一个小型 openGL 项目。我使用的是 GLFW 和 GLEW。

在出现一些硬件问题(硬盘)后,我在笔记本电脑上重新安装了 Windows。现在我尝试继续我的项目,该项目之前运行/调试没有问题,但现在出现错误。

glfwCreateWindow() 返回 NULL(即使没有任何 glfwWindowHints),并且 glwInit() 也会失败。

我以为这是因为我的驱动程序,但我已经更新了集成显卡 (Intel HD 4000) 和高性能 Nvidia GPU 的驱动程序。

使用openGL扩展查看器,我看到集成卡支持OpenGL 4.0,Nvidia GPU支持4.4。

这个项目相当大,所以为了消除问题,我创建了一个基于 GLFW 和 GLEW 的简单创建三角形代码,但我仍然从 glfwWindowCreate() 中收到错误。

我用谷歌搜索了一下,除了更新驱动程序之外,我找不到其他解决方案。什么可能导致此故障?

c++ opengl glfw

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

阻止 Opencascade 写入控制台

使用 OpenCascade C++ 库时,某些函数会向控制台/终端打印一些状态或响应。例如STEPCAFControl_Writer::perform()将打印出如下内容:

*******************************************************************
******        Statistics on Transfer (Write)                 ******

*******************************************************************
******        Transfer Mode = 0  I.E.  As Is       ******
******        Transferring Shape, ShapeType = 0                      ******
** WorkSession : Sending all data
 Step File Name : <file-name>  Write  Done
Run Code Online (Sandbox Code Playgroud)

到控制台。有办法防止这种情况吗?

c++ console logging opencascade

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

正确地重载具有指针成员的类的赋值运算符

如我错了请纠正我:

我知道当有一个成员是指针的类时,类对象的副本将导致表示相同内存地址的指针.这可能导致对一个类对象进行更改以影响此对象的所有副本.

对此的解决方案可以是重载=运算符.鉴于下面的示例,尝试创建动态数组类,为什么对MyArray1进行更改会更改MyArray2:

数组类:

#include <iostream>
#include <cstdlib>

class Array
{
public:
    Array(int N){               //constructor sets size of array
         size = N;
         arr = new int[N];
    }

    ~Array();

    int size;    //array elements
    int *arr;    //dynamic array pointer

    //fill array with random values between 1 and 100
    void fillArray() {
         for (size_t i = 0; i < size; i++)
              {arr[i] = std::rand()%100;}
    }

    //print out array to console
    void printArray() {
         for (size_t i = …
Run Code Online (Sandbox Code Playgroud)

c++ pointers overloading

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