【发布时间】:2015-08-21 00:53:44
【问题描述】:
在src/lib.rs我有以下内容
extern crate opal_core;
mod functions;
mod context;
mod shader;
然后在src/context.rs 我有这样的东西,它试图从src/shader.rs 导入符号:
use opal_core::shader::Stage;
use opal_core::shader::Shader as ShaderTrait;
use opal_core::GraphicsContext as GraphicsContextTrait;
use functions::*; // this import works fine
use shader::*; // this one doesn't
pub struct GraphicsContext {
functions: Gl
}
fn shader_stage_to_int(stage: &Stage) -> u32 {
match stage {
&Stage::Vertex => VERTEX_SHADER,
&Stage::Geometry => GEOMETRY_SHADER,
&Stage::Fragment => FRAGMENT_SHADER,
}
}
impl GraphicsContextTrait for GraphicsContext {
/// Creates a shader object
fn create_shader(&self, stage: Stage, source: &str) -> Box<ShaderTrait> {
let id;
unsafe {
id = self.functions.CreateShader(shader_stage_to_int(&stage));
}
let shader = Shader {
id: id,
stage: stage,
context: self
};
Box::new(shader)
}
}
问题在于语句use shader::*; 给出了错误未解决的导入。
我正在阅读文档,他们说 use 语句总是从当前板条箱的根 (opal_driver_gl) 开始,所以我认为 shader::* 应该导入 opal_driver_gl::shader::* 但它似乎没有这样做所以。我需要在这里使用self 或super 关键字吗?
如果您能提供帮助,谢谢。
【问题讨论】:
-
你看过other questions that mention the same error吗?如果是这样,您的问题与他们有何不同?你试过smaller testcase吗?
-
我已经检查了大部分“未解决的导入”问题。他们主要集中在从板条箱外面获取符号,但我想做相反的事情。我会尝试缩小问题范围。
-
告诉我们您尝试过的内容以及遇到的问题被认为是一种很好的做法。还包括为什么这些尝试和问题不起作用,或者你不明白什么。这可以防止我们猜测您的真正问题是什么,让您更容易获得答案,并且通常会提高您的问题对未来搜索者的有用程度。
-
我看不到任何明显的原因,但是...
shader是否包含来自context的任何导入?如果您最终得到一个依赖于自身的模块,则全局导入可能会导致问题。尝试删除*并列出您实际使用的所有符号。 -
另外你的shader模块真的有公共项吗?