相关疑难解决方法(0)

如何测试之前是否已包含标题

我正在制作一个项目,我对一个问题感到震惊.

我有3个libraries.h,包括另一个特殊的库,definitions.h,但在我的主模块中,我想只包含所有库一次,我的意思是,我想测试是否definitions.h已经包含了库,并包括是否取决于结果.

就像是

If !(#include"definitions.h")
(#include"definitions.h")
Run Code Online (Sandbox Code Playgroud)

c macros header-files

5
推荐指数
2
解决办法
7176
查看次数

类外的成员函数定义

是否可以在类声明之外定义函数或方法?如:

class A 
{
    int foo;
    A (): foo (10) {}
}

int A::bar () 
{
    return foo;
}        
Run Code Online (Sandbox Code Playgroud)

c++ declaration function definition

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

#pragma once 与包含守卫

我正在经历实现定义的行为控制

并且有以下与 相关的文字#pragma once

与头文件保护不同的是,这个 pragma 使得不可能在多个文件中错误地使用相同的宏名称。

我不确定这意味着什么。有人可以解释一下吗?

TIA

c++ pragma include-guards

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

#include重复发现的任何工具?

这听起来很奇怪,但也许存在一个...我用Google搜索,但没有找到任何东西.
简单的例子:
我有一个文件class1.h:

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

另一个文件class2.h:

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

和main.cpp:

#include "class2.h" //as we see here, we getting "a.h" double included by class1.h and class2.h
Run Code Online (Sandbox Code Playgroud)

我想在我的项目中摆脱这种欺骗.

当然,在例子中并没有那么难,但我有大量的文件,它们在很多方面相互包含,很难自己追踪所有的欺骗.

在我自己编写该工具之前,有什么建议吗?:)

c++ include duplicates

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

当我使用这样的头文件时,如何停止#include冗余头?

所以我仍然习惯于模块化编程,并希望确保我坚持最佳实践.如果我有下面的两个模块头文件,是否会#included多次包含每个文件的标题(例如"mpi.h")?有没有正确的方法来解释这个?

此外,我的模块标题通常看起来像这些示例,因此任何其他批评/指针都会有所帮助.

/* foo.h */
#ifndef FOO_H
#define FOO_H

#include <stdlib.h>
#include "mpi.h"

void foo();

#endif
Run Code Online (Sandbox Code Playgroud)

/* bar.h */
#ifndef BAR_H
#define BAR_H

#include <stdlib.h>
#include "mpi.h"

void bar();

#endif
Run Code Online (Sandbox Code Playgroud)

并使用示例程序:

/* ExampleClient.c */
#include <stdlib.h>
#include <stdio.h>
#include "mpi.h"
#include "foo.h"
#include "bar.h"

void main(int argc, char *argv[]) {
    foo();
    MPI_Func();
    bar();
    exit(0)
}
Run Code Online (Sandbox Code Playgroud)

c compiler-construction

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

C++:避免​​重复的符号链接器错误

我收到链接器错误:

duplicate symbol __ZN5ENDF64FileILNS_7MF_enumE1EE4readEv in:
    Read.cpp.o
    Material.cpp.o
Run Code Online (Sandbox Code Playgroud)

其中重复的符号名称是:

$ c++filt __ZN5ENDF64FileILNS_7MF_enumE1EE4readEv
  ENDF6::File<(ENDF6::MF_enum)1>::read()
Run Code Online (Sandbox Code Playgroud)

我知道我不能在多个地方定义相同的功能 - 这是导致此链接器错误的原因.(我已经看到了这个问题:ld:复制符号)我不认为我read()在多个地方定义了函数,但是链接器(clang++)说我做了.

我在哪里复制read()符号?

我的代码结构如下所示:

//MFs.hpp
#ifndef MFS_HPP
#define MFS_HPP
enum class MF_enum {
...
}
#endif


//File.hpp
#ifndef FILE_HPP
#define FILE_HPP

#include "MFs.hpp"

// Definition of class File
template<>
class File {
...
}

// Definition of File<...>::read() function
template <>
void File<1>::read()
{
    std::cout << "Reading into MF=1"<< std::endl;
}

#endif
Run Code Online (Sandbox Code Playgroud)

没有,File.cpp因为File课程是模板化的.所有定义(和声明)都在File.hpp

// …
Run Code Online (Sandbox Code Playgroud)

c++ linker clang

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

C++初学者:'int'之前的预期unqualified-id

正如你可能从这个问题中猜到的那样,我对使用c ++的oop编程很新.(之前我只做过Java)无论如何,我正在尝试为Arduino项目创建一个自定义类并得到上面提到的错误.这是我的文件:

标头Touchable.h

#ifndef Touchable
#define Touchable
#include <Adafruit_TFTLCD.h>

#include <Arduino.h>

class Touchable {
  public:
    int posX;
    int posY;
    Touchable(int, int); //<-- Error here
    ~Touchable();
    void Touchable::draw();
};

#endif
Run Code Online (Sandbox Code Playgroud)

和Touchable.cpp

#include "Touchable.h" //include the declaration for this class
#include <Adafruit_TFTLCD.h>


Touchable::Touchable(int x, int y) {
  posX = x;
  posY = y;
}

Touchable::~Touchable() {
  /*nothing to destruct*/
}

//turn the LED on
void Touchable::draw() {
  //tft.fillRect(posX, posY, 100, 100, 0x0000);
}
Run Code Online (Sandbox Code Playgroud)

编辑:编译器消息:

In file included from sketch/Touchable.cpp:1:0:
Touchable.h:11: error: expected …
Run Code Online (Sandbox Code Playgroud)

c++ oop arduino

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

了解C语言中#defines的不同样式

我查看了C编程语言的不同源代码,发现#define的使用风格不同。

我从技术上知道他们的用例,不管它们的样式如何,它们都可以按预期工作,但是从编码准则出发,我想问一下它们的含义以及何时使用特定的。

#define MY_DEFINE_H

#define MY_DEFINE_H_

#define MY_DEFINE_H__

#define __MY_DEFINE_H__
Run Code Online (Sandbox Code Playgroud)

另外,如果可以的话,请分享一些参考,以便我详细介绍。

c coding-style

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

C/C++头部保护一致性

我需要一个实用程序来检查标题保护中的冲突.如果实用程序可以检查符号和文件名是否一致(使用正则表达式或其他东西),那将是很好的.

问候,rn141.

编辑:

示例1.断头防护罩.不能防止多重包含.

// my_file1.h
#ifndef my_project_my_file1_h__
#define my_project_my_fil1_h__ // should be my_project_my_file1_h__
    // code goes here
#endif
Run Code Online (Sandbox Code Playgroud)

示例2.与上述标题保护冲突.

// my_file2.h
#ifndef my_project_my_file1_h__ // should be my_project_my_file2_h__
#define my_project_my_file1_h__ // should be my_project_my_file2_h__
    // code goes here
#endif
Run Code Online (Sandbox Code Playgroud)

c c++

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

C++继承类没有显示默认构造函数

我正在创建一些类,我决定创建一个基本类,其他类将继承该基本类

所以这是我的基本类头

#pragma once

#include "ImageService.h"

class State
{
public:
    State( ImageService& is );
    ~State();

    void Update();

};
Run Code Online (Sandbox Code Playgroud)

不要担心方法,它们不是问题.所以现在我继续创建像这样的IntroState(头文件)

#pragma once

#include "State.h"

class IntroState : public State
{
public:
    IntroState(ImageService& imageService);
    ~IntroState();

    GameState objectState;
};
Run Code Online (Sandbox Code Playgroud)

这是cpp文件

#include "IntroState.h"


IntroState::IntroState(ImageService& imageService)
{
    //error here
}


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

在构造函数中它声明"没有类"State""的默认构造函数,现在我认为正在进行的是,State的默认构造函数需要传递给它的imageService引用.那么我如何将此构造函数中的imageservice传递给状态构造函数?

c++ inheritance

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