小编Sco*_*ott的帖子

如何在Matlab中设置函数参数的默认值?

是否可以在Matlab中使用默认参数?例如,这里:

function wave(a, b, n, k, T, f, flag, fTrue=inline('0'))
Run Code Online (Sandbox Code Playgroud)

我想让真正的解决方案成为wave函数的可选参数.如果有可能,任何人都可以证明这样做的正确方法吗?目前,我正在尝试上面发布的内容,我得到:

??? Error: File: wave.m Line: 1 Column: 37
The expression to the left of the equals sign is not a valid target for an assignment.
Run Code Online (Sandbox Code Playgroud)

matlab arguments default

120
推荐指数
7
解决办法
10万
查看次数

在C++中包含彼此的标题

我是一个C++新手,但我无法在网上找到这个(最有可能是微不足道的)问题的答案.我在编译两个类相互包含的代码时遇到了一些麻烦.首先,我的#include语句应该在我的宏内部还是外部?实际上,这似乎并不重要.但是,在这种特殊情况下,我遇到了麻烦.将#include语句放在宏之外会导致编译器递归并给我"#include嵌套太深"的错误.这似乎对我有意义,因为在调用#include之前,这两个类都没有完全定义.然而,奇怪的是,当我尝试将它们放入其中时,我无法声明其中一个类的类型,因为它无法识别.从本质上讲,这是我正在尝试编译的内容:

#ifndef A_H_
#define A_H_

#include "B.h"

class A
{
    private:
        B b;

    public:
        A() : b(*this) {}
};

#endif /*A_H_*/
Run Code Online (Sandbox Code Playgroud)

BH

#ifndef B_H_
#define B_H_

#include "A.h"

class B
{
    private:
            A& a;

    public:
        B(A& a) : a(a) {}
 };

#endif /*B_H_*/
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "A.h"

int main()
{
    A a;
}
Run Code Online (Sandbox Code Playgroud)

如果它有所作为,我使用的是g ++ 4.3.2.

一般来说,#include语句应该去哪里?我一直看到它们超出了宏,但我清楚描述的场景似乎打破了这个原则.感谢任何帮助提前!如果我犯了任何愚蠢的错误,请允许我澄清我的意图!

c++ recursion header include

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

如何使用MSCV中的Boost Filesystem Library解决LNK1104错误?

我无法将我的项目链接到Microsoft Visual C++ 2008 Express Edition中的Boost(版本1.37.0)文件系统lib文件.Filesystem库不是仅包含头的库.我一直在关注官方推送网页上发布的Windows入门指南.以下是我采取的步骤:

  1. 我使用bjam构建完整的lib文件集:

    bjam --build-dir="C:\Program Files\boost\build-boost" --toolset=msvc --build-type=complete
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我将/ libs目录(位于C:\ Program Files\boost\build-boost\boost\bin.v2)复制C:\ Program Files\boost\boost_1_37_0\libs.

  3. 在Visual C++中,在" 项目">"属性">"其他库目录"下,我添加了以下路径:

    • C:\ Program Files\boost\boost_1_37_0\libs
    • C:\ Program Files\boost\boost_1_37_0\libs\filesystem\build\msvc-9.0express\debug\link-static\threading-multi

    我绝望地加了第二个.它是libboost_system-vc90-mt-gd-1_37.lib所在的确切目录.

  4. 配置属性> C/C++>常规>其他包含目录中,我添加了以下路径:

    • C:\ Program Files\boost\boost_1_37_0
  5. 然后,为了使锦上添花,在工具>选项VC++目录>库文件下,我添加了步骤3中提到的相同目录.

尽管如此,当我构建我的项目时,我收到以下错误:

fatal error LNK1104: cannot open file 'libboost_system-vc90-mt-gd-1_37.lib'
Run Code Online (Sandbox Code Playgroud)

另外,这里是我试图编译的代码以及(假设正确的)lib文件所在的前述目录的屏幕截图:

#include "boost/filesystem.hpp"   // includes all needed Boost.Filesystem declarations
#include <iostream>               // for std::cout
using boost::filesystem;          // for ease of …
Run Code Online (Sandbox Code Playgroud)

c++ filesystems linker boost visual-c++

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

反向谱图A在MATLAB中的La Aphex Twin

我试图通过将其视为一个频谱将图像转换成音频信号在MATLAB 中的Aphex Twin酒店的宋Windowlicker.不幸的是,我无法获得结果.

这就是我现在所拥有的:

function signal = imagetosignal(path, format)

    % Read in the image and make it symmetric.
    image = imread(path, format);
    image = [image; flipud(image)];
    [row, column] = size(image);
    signal = [];

    % Take the ifft of each column of pixels and piece together the real-valued results.
    for i = 1 : column

        spectrogramWindow = image(:, i);
        R = abs(ifft(spectrogramWindow));
        % Take only the results for the positive frequencies.
        signalWindow = R(1 : row / 2.0);
        signal …
Run Code Online (Sandbox Code Playgroud)

matlab image-manipulation signal-processing fft inverse

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

如何在MATLAB中创建分段内联函数?

我在MATLAB中有一个函数,它将另一个函数作为参数.我想以某种方式定义一个可以传入的分段内联函数.这在MATLAB中是否可行?

编辑:我想表达的功能是:

f(x) = { 1.0,  0.0 <= x <= 0.5,
         -1.0, 0.5 < x <= 1.0

where 0.0 <= x <= 1.0
Run Code Online (Sandbox Code Playgroud)

matlab inline function piecewise

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

C++ Style Convention:类声明中的参数名称

我是一个相当新的C++程序员,我想在类声明中听到支持和反对命名参数的参数.


这是一个例子:

Student.h

#ifndef STUDENT_H_
#define STUDENT_H_

#include <string>

using namespace std;

class Student
{
    private:
        string name;
        unsigned int age;
        float height, GPA;

    public:
        Student(string, unsigned int, float, float);

        void setAge(unsigned int);
};

#endif /*STUDENT_H_*/
Run Code Online (Sandbox Code Playgroud)

#ifndef STUDENT_H_
#define STUDENT_H_

#include <string>

class Student
{
    private:
        string name;
        unsigned int age;
        float height, GPA;

    public:
        Student(string name, unsigned int age, float height, float GPA);

        void setAge(unsigned int age);
};

#endif /*STUDENT_H_*/
Run Code Online (Sandbox Code Playgroud)

Student.cpp

#include "Student.h"

Student::Student(   string name,
            unsigned int …
Run Code Online (Sandbox Code Playgroud)

c++ parameters coding-style naming-conventions

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

调用Method时的C++前向声明问题

我有一个问题,我认为这与前向声明有关,但也许不是.

这是相关代码:

#ifndef A_H_
#define A_H_

#include "B.h"

class A
{
    private:
        B b;

    public:
        A() : b(*this) {}

        void bar() {}
};

#endif /*A_H_*/
Run Code Online (Sandbox Code Playgroud)

BH

#ifndef B_H_
#define B_H_

#include "A.h"

class A;

class B
{
    private:
        A& a;

    public:
        B(A& a) : a(a) {}

        void foo() { /*a.bar();*/ } //doesn't compile
};

#endif /*B_H_*/
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "A.h"

int main()
{
    A a;

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

问题似乎是调用A :: bar().程序成功编译,直到我尝试调用此方法,此时我得到两个错误:

错误:无效使用不完整类型'struct A'

错误:'struct A'的前向声明

我认为这是因为A :: bar()尚未定义或声明,因为两个标题相互引用.但是,我转发申报的A级,我不知道还需要做什么.我是C++的新手,所以请原谅我.我无法在网上找到这个问题的答案.一如既往,提前谢谢!

c++ compiler-construction declaration

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

C++运算符歧义

请原谅我,因为我对C++很新,但我在操作员歧义方面遇到了一些麻烦.对于我桌面上编译的代码,我认为它是特定于编译器的.但是,它无法在我的笔记本电脑上编译.我想我知道出了什么问题,但我看不到它的优雅方式.如果我犯了一个明显的错误,请告诉我.无论如何,这就是我要做的事情:

我创建了自己的Vector4类,它看起来像这样:

class Vector4
{
 private:
   GLfloat vector[4];
 ...
}
Run Code Online (Sandbox Code Playgroud)

然后我有这些运算符导致问题:

operator GLfloat* () { return vector; }

operator const GLfloat* () const { return vector; }

GLfloat& operator [] (const size_t i) { return vector[i]; }

const GLfloat& operator [] (const size_t i) const { return vector[i]; }
Run Code Online (Sandbox Code Playgroud)

我有转换运算符,以便我可以将我的Vector4类的实例传递给glVertex3fv,我有明显的原因下载.但是,涉及下载Vector4的调用对编译器来说是不明确的:

enum {x, y, z, w}
Vector4 v(1.0, 2.0, 3.0, 4.0);

glTranslatef(v[x], v[y], v[z]);
Run Code Online (Sandbox Code Playgroud)

以下是候选人:

candidate 1: const GLfloat& Vector4:: operator[](size_t) const
candidate 2: operator[](const GLfloat*, int) <built-in>
Run Code Online (Sandbox Code Playgroud)

当下载运算符已经在Vector4上定义时,为什么它会尝试将我的Vector4转换为GLfloat*?有没有一个简单的方法来解决这个问题?我只是犯了一个愚蠢的错误?在此先感谢您的帮助.

c++ opengl operators ambiguity operator-keyword

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

C++棘手的继承类定义问题

在处理包括彼此在内的多个类时,我遇到了这个错误:

error: expected class-name before '{' token
Run Code Online (Sandbox Code Playgroud)

我看到发生了什么,但我不知道如何正确纠正它.这是代码的抽象版本:

#ifndef A_H_
#define A_H_

#include "K.h"

class A
{
    public:
        A();

};

#endif /*A_H_*/
Run Code Online (Sandbox Code Playgroud)

A.cpp

#include "A.h"

A::A() {}
Run Code Online (Sandbox Code Playgroud)

BH

#ifndef B_H_
#define B_H_

#include "A.h"

class B : public A
{ // error: expected class-name before '{' token
    public:
        B();
};

#endif /*B_H_*/
Run Code Online (Sandbox Code Playgroud)

B.cpp

#include "B.h"

B::B() : A() {}
Run Code Online (Sandbox Code Playgroud)

JH

#ifndef J_H_
#define J_H_

#include "B.h"

class J
{
    public:
        J();
};

#endif /*J_H_*/
Run Code Online (Sandbox Code Playgroud)

J.cpp

#include "J.h"

J::J() {} …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance forward-declaration

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

C++自定义GUI按钮问题

我正在设计一个图形应用程序,我决定编写自己的菜单.我希望这个菜单与平台无关.目前,我的菜单主​​要包含许多按钮.我的问题涉及单击按钮时处理事件.我的困境是一个按钮"知道"它存在的背景.在我看来,如果有一些更大的代码创建按钮和处理鼠标事件,可能会出现某种类型的switch语句的需要.switch语句必须根据单击的唯一定义按钮调用相应的操作.

我想避免这个switch语句.我的第一个想法是让每个按钮都保持一个函数指针,用于在单击时盲目地启动正确的操作.这将消除任何特定于按钮的代码.然而,它让我觉得按钮应该包含任何特定于上下文的信息(例如函数指针).我相当缺乏经验,我想知道这是否被认为是糟糕的设计.无论如何,我如何以不需要某种类型的开关语句的方式设计我的菜单并被认为是良好的OOP设计?我想听听您的首选解决方案.

提前致谢!

c++ oop button

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