相关疑难解决方法(0)

Arduino库:函数的多个定义

今天我在尝试使用IRremote库时遇到了一个奇怪的问题,我设法解决了以下问题.如果你在库中有一个文件夹,包含Foo.hFoo.cpp在里面,并写一个草图来包含Foo.h:

foo.h中

#ifndef Foo_H
#define Foo_H

int AAA() {
    return 0;
}

#endif
Run Code Online (Sandbox Code Playgroud)

Foo.cpp中

#include "Foo.h"
Run Code Online (Sandbox Code Playgroud)

草图

#include <Foo.h>

void setup(){

}

void loop(){

}
Run Code Online (Sandbox Code Playgroud)

错误消息是:

 Foo\Foo.cpp.o: In function `AAA()':

 E:\workShop\Arduino\libraries\Foo\/Foo.h:5: multiple definition of `AAA()'

 includeTest.cpp.o:E:\workShop\Arduino\libraries\Foo/Foo.h:5:

 first defined here
Run Code Online (Sandbox Code Playgroud)

我正在使用Windows 7 32位机器.在Arduino 1.0.5,1.0.4和21,22上测试.


因此,通过一些研究,我发现问题来自于我对预处理器和链接的混淆.这个问题解释了预处理器如何包含文件和包含防护:

以下是帮助我理解链接的一些页面:

这是对内联说明符的更好解释:

c++ arduino

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

在 C++ 中将类分离到单独的文件中

编辑:添加了“加法”类,不小心忘记了。如何将类分成不同的文件?我了解类的工作原理以及如何制作对象和类似的东西。但是,我在将类放入不同文件的过程中发现了一些混乱。非常感谢您的帮助!另外,我使用 CodeBlocks 作为 IDE。到目前为止,这是我的理解:

  1. 创建新的类,CB 会给你一个“.h”和一个新的“.cpp”。
  2. 源文件开头的“Classname::Classname”是作用域解析运算符。
  3. 您可以在主源文件中使用“#include classname.h”来导入其内容。
  4. 您可以使用已声明的对象从“main”调用函数。

到目前为止,这是我的理解,但我只是对如何实现它感到困惑。我创建了一个简单的计算器,其中包含一个源文件中的所有类。它工作得很好,我想我为此感到非常自豪:) 我知道有很多更简单的方法来制作这样的东西,但我使用类和对象来代替练习的唯一目的。这是我的计算器代码。另外,我真的为这篇长篇文章道歉:/谢谢,如果你读了这么远,特别感谢你能帮我一点!

这是我在一个源文件中的代码:

#include <iostream>
using namespace std;

class Addition {
public:
float add (float x, float y) {
float sum;
sum=x+y;
return sum;
}


};


class Subtraction {
public:
float subtract (float x, float y) {
float dif;
dif=x-y;
return dif;
}

};

class Multiplication {
public:
float multiply (float x, float y) {
float prod;
prod=x*y;
return prod;
}

};

class Division {
public:
float divide (float x, …
Run Code Online (Sandbox Code Playgroud)

c++ class

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

使用 g++ 编译 - 包括头文件

我只是有一个简单的问题,因为我试图了解如何在 C++ 中编译(在 ubuntu 12.04 中)包含一个简单头文件的 main 。

命令:

g++ -o main main.cpp add.cpp -Wall
Run Code Online (Sandbox Code Playgroud)

工作正常。然而,这让我对头文件的意义感到困惑。目前,我有一个简单的程序:

#include <iostream>
#include "add.h"
using namespace std;

int main () {


  int a, b;
  cout << "Enter two numbers to add together" << endl;
  cin >> a >> b;
  cout << "Sum of " << a << " and " << b << " is " << add(a,b) << endl;

  return 0;

}
Run Code Online (Sandbox Code Playgroud)

我的“add.cpp”只是将两个数字加在一起。

头文件只是函数原型的替换吗?我是否需要单独编译头文件,或者在命令行中包含所有 .cpp 文件就足够了吗?我知道如果我需要更多文件,则需要生成文件。

c++ g++ header

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

将结构/常量保持在单独的标题中

我有一个VECTOR结构,它包含3个整数,i,j和k.我需要在多个头文件中使用此结构.将所有#defines和结构,所有常量移动到标记为"Constants.h"的单独头文件,或者我应该在每个头文件中定义相同的结构(我当前使用它)被认为是不好的做法吗?

c++

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

像Java一样在类中定义C++方法

我是Java程序员,我是C++编程的新手.在java中,我们必须在单独的文件中编写所有类,并且所有方法的定义都在类中.但是现在在C++中,我想知道为什么C++允许程序员在类之外编写方法的定义.有没有办法编写像Java这样的C++程序?

c++ java class-design class

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

在哪里/如何将函数放在头文件中与 C++ 源文件中

有人在这里问了一个类似于我的问题: Function Declaration inside or outside of the class?

为什么只在.h文件中声明函数而不是定义,然后将整个定义写入.cpp文件中?重点是什么?为什么不把整个函数放在头文件中的一个类中,而不是仅仅声明它?这似乎是重复和毫无意义的。

如何构建程序以使用头文件和其他.cpp文件而不将函数、类和变量堆积到主文件中?我能得到一个使用.h文件和几个.cpp文件的简单程序的例子吗?

c++ class header-files

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

当我可以在头文件中声明和定义它时,为什么要创建一个 .cpp 文件?

我理解并非常欣赏分离头文件(.h、.hpp)和源文件(.cpp)的做法。

然而,许多简单的类可以完全在头文件本身中表达。我可以在类中定义一些方法,在类下定义其他方法(例如模板方法、内联方法)。

当我可以在头文件中声明定义整个类时,创建 .cpp 文件有什么好处?(我什至需要吗?)

c++ oop header-files

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

我什么时候应该使用头文件?

在为当地一所大学的几名学生辅导之后,我被问到"与普通的.cpp文件相比,何时最好使用C++中的头文件?".我有点挣扎着答案,并且看看是否有一个更明确的答案,在哪些场景下最好的.

使用可在多个项目中使用的代码时最好使用头文件吗?我知道这是一个愚蠢的例子,但如果你做了自定义数学函数,可以在其他项目中反复使用; 那最好放在头文件中是否正确?

c++ oop

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

Objective C中的接口有什么意义?

我已经编写了Objective C近一年了,我从来没有机会将Interface(.h)用于其他目的,而不是声明几乎与在Implementation( .m)中可以找到的类结构相同.

由于我来自其他语言而没有Objective C接口这样的东西,我想知道是否有一些或几种用途我缺少或者这只是一种惯例,这种特定的语言可能从它的前辈继承.

谢谢!

objective-c

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

标题和cpp或只是cpp文件 - 最佳做法?

环顾不同的代码库,我看到了各种风格:

  1. 头文件中定义的类"接口"和cpp文件中的实际impl.在这种方法中,标题看起来很好定义并且易于阅读,但cpp文件看起来很混乱,因为它只是一个方法列表.

  2. 我看到的第二种方法就是将所有内容放在单个类cpp文件中.这些类文件包含类定义主体中的定义和实际方法.这种方法对我来说看起来更好(更像是Java和c#).

我应该使用哪种风格?

c++

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

写作课 - 良好实践

第一件事是我真的不想在堆栈代码交换上发布这个,因为这是在大约5分钟内编写的少量代码.

我想问你我写的课(我在c ++中的第一篇)是否可以接受.我真的没有很多c ++代码,所以我无法将其与任何东西进行比较.

但我已经看到一些只实现函数声明的类,这些函数的内部编写在代码中的其他地方.

如果有什么东西是错的,我会问你任何建议.为什么他们按照我在上面的段落中描述的那样做?哪种编码风格更好?

class File {

private:

    FILE *_handler;
    char *_path;
    long _size;

    void setHandler(char *mode)
    {
        this->_handler = fopen(this->_path, mode);
    }

public:

    File(char *path)
    {
        this->_path = path;
    }

    size_t read()
    {
        this->setHandler("r");
        char *buffer = (char*) malloc(sizeof(char)*this->_size);

        return fread(buffer, 1, this->_size, this->_handler);
    }

    void write(char *data)
    {
        this->setHandler("w");
        fputs(data, this->_handler);
    }

    long size()
    {
        if(! sizeof(this->_size) > 0)
        {
            fseek(this->_handler, 0, SEEK_END);
            this->_size = ftell(this->_handler);
            rewind(this->_handler);
        }

        return this->_size;
    }

}; // End File
Run Code Online (Sandbox Code Playgroud)

c++ oop class-design class

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

在自己的源文件中包含头文件?

说我有一些源代码MyAmoeba.cpp,带有相关的头文件MyAmoeba.h.在MyAmoeba.cpp中包含MyAmoeba.h是不错的做法?(我假设它从来没有必要,除了可能在一些设计糟糕的情况下,头文件包含一个宏来更改源文件)

据我所知,执行上述操作意味着如果您更改MyAmoeba.cpp中的任何内容的签名,但忘记在MyAmoeba.h中执行此操作,则错误将在编译阶段而不是在链接阶段发生,但我不确定这是好事/坏事/无关紧要的事情.

我对c ++ btw相当新,如果这个问题无论如何都是荒谬的(如果是这样的话,请指出我)

编辑:我正在玩一个只包含函数声明的头文件,但没有类/结构/等定义.从其他来源和下面的答案,在我看来,当头文件只有声明时,没有必要在相关的源文件中包含头文件,但如果头文件中有任何定义,那么它确实必要的(因为您可以根据需要多次声明,但只定义一次,并且显然可以使用定义代替声明,因此源文件中的函数定义将同时计为我的声明).

c++

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

为什么我可以在类中声明构造函数

考虑这个链接.看到这段代码:

 class MyClass
    {
    public:
        MyClass();
        ~MyClass();

    private:
        int _a;
    };

    MyClass::MyClass()
    {
    }

    MyClass::~MyClass()
    {
    }
Run Code Online (Sandbox Code Playgroud)

我们可以在类中声明构造函数.
为什么我可以在类中声明构造函数以及为什么要这样做?

c++

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

标签 统计

c++ ×12

class ×4

oop ×3

class-design ×2

header-files ×2

arduino ×1

g++ ×1

header ×1

java ×1

objective-c ×1